Linux

一、Linux简介和安装

1、Linux简介

1.1、初识Linux

Linux,全称 GNU/Linux,是一套免费使用和自由传播的类 UNIX 操作系统,其内核由林纳斯·本纳第克特·托瓦兹于 1991 年第一次释出,它主要受到 MINIX 和 UNIX 思想的启发,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 UNIX 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux 有上百种不同的发行版,如基于社区开发的 Debian、Arch Linux,和基于商业开发的 Red Hat Enterprise Linux、SUSE、Oracle Linux 等。

1.2、Linux简介

Linux 操作系统性能稳定,并且是开源的操作系统软件。它的防火墙相关的组件保证了系统的安全,且配置简单性能高效。Linux 在很多企业网络中,追求速度和安全,它不仅仅是被网络运维人员当作服务器使用,也可以作为网络防火墙。Linux 开放源码并且没有版权,技术社区用户多等特点 ,开放源码使得用户可以自由裁剪,灵活性高,功能强大,成本低。尤其系统中内嵌网络协议栈 ,经过适当的配置就可实现路由器的功能。这些特点使得 Linux 成为开发路由交换设备的理想开发平台。

1.3、Linux发展史

  • Linux 操作系统的诞生、发展和成长过程始终依赖着五个重要支柱:UNIX 操作系统、MINIX 操作系统、GNU 计划、POSIX 标准和 Internet 网络。
  • 20 世纪 80 年代,计算机硬件的性能不断提高,PC 机的市场不断扩大,UNIX、DOS、MacOS。UNIX 操作系统价格昂贵且不能在一般的 PC 机上面运行,DOS 操作系统相对来说比较简陋,且源代码被软件厂商严格保密,MacOS 是一种专门用于苹果计算机的操作系统。
  • 因此,计算机应用领域需要更加完善、强大、价格低廉和开源的操作系统。由于供教学使用的典型操作系统很少,当时荷兰一位美国人教授 AndrewS.Tanenbaum 编写了一个操作系统,名为 MINIX,为了向学生讲述操作系统内部工作原理。
  • MINIX 虽然很好,但只是一个用于教学为目的的简单操作系统,它最大的好处就是公开了源代码。全球计算机领域的学生都可以通过钻研 MINIX 源代码来了解和学习 MINIX 操作系统,其中芬兰赫尔辛基大学的学生 Linus Torvalds 就是其中一个,他在吸收了 MINIX 精华的基础上,在 1991 年写出了属于自己的操作系统 Linux,并且版本为 Linux0.01,是 Linux 时代开始的标志。他利用 UNIX 的核心,去掉了那些复杂难处理的核心程序,把它改写成适用于普通计算机的操作系统放在网络上免费供其他学习者下载。
  • 1994 年推出完整的核心 Version1.0,至此,Linux 逐渐成为功能完善、稳定的操作系统,并被广泛使用。

1.4、Linux特性和优点

Linux特性

基本思想

Linux 的基本思想有两点:第一,一切都是文件;第二,每个文件都有确定的用途。其中第一条详细来讲就是系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。至于说 Linux 是基于 UNIX 的,很大程度上也是因为这两者的基本思想十分相近。

完全免费

Linux 是一款免费的操作系统,用户可以通过网络或其他途径免费获得,并可以任意修改其源代码。这是其他的操作系统所做不到的。正是由于这一点,来自全世界的无数程序员参与了 Linux 的修改、编写工作,程序员可以根据自己的兴趣和灵感对其进行改变,这让 Linux 吸收了无数程序员的精华,不断壮大。

完全兼容 POSIX1.0 标准

这使得可以在 Linux 下通过相应的模拟器运行常见的 DOS、Windows 操作系统中的软件程序。这为用户从 Windows 转到 Linux 奠定了基础。许多用户在考虑使用 Linux 时,就想到以前在 Windows 下常见的程序是否能正常运行,这一点就消除了他们的疑虑。

多用户、多任务

Linux 支持多用户,各个用户对于自己的文件设备有自己特殊的权利,保证了各用户之间互不影响。多任务则是现在计算机最主要的一个特点,Linux 可以使多个程序同时并独立地运行。

良好的界面

Linux 同时具有字符界面和图形界面。在字符界面用户可以通过键盘输入相应的指令来进行操作。它同时也提供了类似于 Windows 图形界面的 X-Window 系统,用户可以使用鼠标对其进行操作。在 X-Window 环境中就和在 Windows 中相似,可以说是一个 Linux 版的 Windows 操作系统。

Linux优点

  • Linux 由众多微内核组成,其源代码完全开源;
  • Linux 继承了 UNIX 的特性,具有非常强大的网络功能,其支持所有的因特网协议,包括 TCP/IPv4、 TCP/IPv6 和链路层拓扑程序等,并且可以利用 UNIX 的网络特性开发出新的协议栈;
  • Linux 系统工具链完整,简单操作就可以配置出合适的开发环境,可以简化开发过程,减少开发中仿真工具的障碍,使系统具有较强的移植性;

1.5、Linux发行版本

由于最初 Linux 操作系统开源免费,所有的学习者都可以将 Linux 操作系统优化和拓展,所以 Linux 操作系统发展迅猛,当前发行版非常多,这里简单介绍一下六种常见的 Linux 操作系统。

1.5.1、 Debian

Debian 计划是一个致力于创建一个自由操作系统的合作组织。我们所创建的这个操作系统名为 Debian。操作系统是使计算机运行的基本程序和工具的集合,其中最主要的部分称为内核(kernel)。内核是计算机中最重要的程序,负责一切基本的调度工作,并让您运行其他程序。Debian 系统目前采用 Linux 内核或者 FreeBSD 内核。

然而,让 Debian 支持其他内核的工作也正在进行,最主要的就是 Hurd。Hurd 是一组在微内核(例如 Mach)上运行的、提供各种不同功能的守护进程。Hurd 是由 GNU 工程所设计的自由软件。官方所创建的这个操作系统中的大部分基本工具来自于 GNU 工程;因此我们把它们命名为 GNU/Linux、GNU/kFreeBSD 和 GNU/Hurd。

这些工具同样都是自由的,当然,人们真正需要的是应用软件,也就是帮助他们完成工作的程序:从文档编辑,到电子商务,到游戏娱乐,到软件开发。Debian 带来了超过 51000 个软件包(为了能在您的机器上轻松地安装,这些软件包都已经被编译包装为一种方便的格式),一个软件包管理器(APT),以及其他帮助您在上千台计算机上管理数千个软件包的工具,过程就如安装一个应用程序那么简单。而这些全都是自由软件。这有点像一个高塔:在最底层的是内核,在内核上面的是所有的基本工具,然后是所有您在计算机上运行的软件

最后,在这个高塔顶端的就是 Debian 把每件事情谨慎地组织和配合在一起,使得它们能够在一起和谐地运作。

1.5.2、RedHat

红帽在 2014 年 6 月发布了最新旗舰版企业操作系统,红帽企业 Linux 7。基于红帽企业 Linux 7 操作系统,企业可整合裸机服务器、 虚拟机、基础设施即服务(IaaS)和平台即服务(PaaS),以构建一个强大稳健的数据中心环境,满足不断变化的业务需求。红帽卫星是一个综合性解决方案,它通过配置软件分发、补丁和配置管理,以及物理、虚拟和云环境的订阅管理为红帽系统提供完整的生命周期管理,为管理构建、部署、运行和淘汰系统所需的工具提供了单独的管理控制台和方法论。

1.5.3、CentOS

CentOS(Community Enterprise Operating System,中文意思是社区企业操作系统)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同,在于 CentOS 完全开源

1.5.4、Slackware

Slackware Linux 是由 Patrick Volkerding 开发的 GNU/Linux 发行版。与很多其他的发行版不同它坚持 KISS(Keep It Simple Stupid) 原则。一开始,配置系统会有一些困难,但是更有经验的用户会喜欢这种方式的透明性和灵活性。 Slackware 的很多特性体现出了 KISS 原则,最为有名的例子就是不依赖图形界面的文本化系统配置,传统的服务管理方式和不解决依赖的包管理

1.5.5、Ubuntu

Ubuntu 是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的 “ubuntu” 一词,意思是 “人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观。Ubuntu 基于 Debian 发行版和 Gnome 桌面环境,而从 11.04 版起,Ubuntu 发行版放弃了 Gnome 桌面环境,改为 Unity。从前人们认为 Linux 的难以安装、难以使用,在 Ubuntu 出现后这些都成为了历史Ubuntu 也拥有庞大的社区力量,用户可以方便地从社区获得帮助

1.6、为什么学习LInux

Linux 操作系统在服务器、云计算、大数据、嵌入式等等领域发展日益增大,几乎所有的开发、运维工程师必须都要使用和接触 Linux 操作系统,学习 Linux 操作系统基础教程将会帮助你很好的管理 Linux 服务器、项目部署、服务搭建,为你学习 Linux 高级功能打下基础。

2、GNU项目简介

2.1、GNU项目简介

GNU 项目计划最开始是在 1984 年由美国著名的黑客理查德・斯托曼(Richard Matthew Stallman)发起的,GNU 获得了自由软件基金会(FSF)的资金支持一直是 GNU 的主要资金来源,该项目主要是为了建立免费的开源的 UNIX 类系统,其基本原则是程序源代码开放和软件思想共享。

GNU/Linux 是一种常见的并且广泛用于商业环境的免费开源操作系统。由于 GNU 将要实现 UNIX 类各系统的接口标准,因此 GNU 计划并不局限于 Linux 系统也可以开发其他不同的操作系统。GNU 计划大量采用了当时已经可自由使用的软件,例如 OpenOffice 排版系统和 X-Window 图形界面系统等。不过随着 GNU 计划的发展和壮大也开发了大批其他的自由软件,这些软件中的经典也被移植到其他操作系统平台上,例如 NC 工具就被移植到 Microsoft Windows、BSD 家族、Solaris 及 MacOS。

为了确保 GNU 系列软件可以真正地自由地 "使用、复制、修改和发布",所有 GNU 软件都包含有一份在禁止其他人添加任何限制的情况下,授权所有权利给任何人的协议框架,GNU 通用公共许可证协议(GNU General Public License,GPL)。这个就是被大家称为公共版权的含义。GNU 也针对不同场合,提供 GNU 宽通用公共许可证GNU 自由文档许可证这两种协议条款以便适用不同的使用场合。

2.2、GNU的特点

GNU/Linux 将可以兼容并能够执行 UNIX 标准的程序,但是不会和 UNIX 系统完全一模一样,最大的不同是 GNU 计划拥有支持长文件名、版本号、一个健壮稳定文件系统,在某些情况下还有自动文件名补全、与使用终端无关的显示支持、可能最后还要有一个基于 x-windows 的视窗系统,以使好几个系统程序和普通的 UNIX 应用程序能共享同一屏幕。

C 语言将成为系统的程序语言。并且会想办法支持 UUCP,MIT Chaosnet,及 Internet 的通讯交流协议。 GNU 最初的目标是在有虚拟内存的 68000/16000 等系列机器上开发,因为这样的环境是最容易开发程序来实现 GNU 的运行。剩下来让 GNU 能在其它较小的机器上运行的工作,将会留给那些希望能在这些机器上使用的人。

GNU 不是公共的,毫无约束的软件(public domain)。GNU 计划允许每一个人修改及传播 GNU,但是绝不允许传播者对他传播的程序再加进其他的限制。也就是说,不允许将修改后的程序据为己有。GNU 计划希望能确保 GNU 所有的版本都能保持自由,所以 GNU 的核心精神是自由与分享,这和真正的 Hacker 精神有异曲同工之妙,虽不能说 GNU 精神就是 Hacker 精神,不过很难把两者清楚的分开,实际上很多 Hacker 都为 GNU 做出了巨大的贡献。对知识的渴求是支持他们探索的唯一动力。当然这里的 Hacker 黑客不是那些破坏计算机系统牟取私利而臭名昭著的骇客。

2.3、发展历程

  • 1985 年,著名美国黑客理查德・斯托曼创立了 GNU 项目计划。 1985 年,同年查德・斯托曼创立了自由软件基金会(Free Software Foundation)来为 GNU 计划提供技术、法律以及资金支持。尽管 GNU 计划大部分时候是由大家自愿无偿贡献的,但 FSF 还是会聘请程序员帮助编写。当 GNU 计划开始逐渐获得成功时,一些商业公司开始介入开发和技术支持。当中最著名的就是之后被 Red Hat 红帽兼并的 Cygnus Solutions。
  • 1990 年,成熟的 GNU 计划已经开发出的软件包括了一个功能强大的文字编辑器 Emacs、C 语言编译器 GCC 以及大部分 UNIX 系统的程序库和工具。唯一依然没有完成的重要组件,就是操作系统的内核。
  • 1991 年Linux 之父林纳斯・托瓦兹编写出了与 UNIX 兼容的 Linux 操作系统内核并在 GPL 条款下发布。Linux 之后在网上广泛流传,许多程序员参与了开发与修改
  • 1992 年,林纳斯的 Linux 与其他 GNU 软件开始结合,完全自由的 Linux 操作系统正式诞生。该操作系统往往被称为 “GNU/Linux” 或简称 Linux。许多 UNIX 系统上也安装了 GNU 软件,因为 GNU 软件的质量比之前 UNIX 的软件还要好。GNU 工具还被广泛地移植到 Windows 和苹果 Mac OS 上。
  • 现在,GNU 项目计划十几年以来已经成为一个对软件开发主要的影响力量,创造了无数的重要的工具,例如:编译器,文本编辑器,甚至一个全功能的操作系统。这个工程是从 1984 年麻省理工学院的程序员理查德・斯托曼的想法得来的,他想要创建一个自由的和 UNIX 类似的操作环境。从那时开始,许多程序员聚集起来开始开发一个自由的、高质量、易理解的软件。

3、安装虚拟机

3.1、下载VMware

来到官网下载 Windows 版本 VMware 安装程序,如图所示选择合适版本的安装程序并下载,需要注册完账号即可下载:

4、安装Linux操作系统

4.1、下载CentOS镜像

来到 CentOs官网 下载 CentOs 操作系统 .iso 文件,这里选择阿里云的镜像文件:

4.2、创建新的虚拟机

自定义---稍后安装操作系统---Red Hat---网络选择NAT网络---LSI Logic---SCSI---创建新虚拟磁盘---拆分多个文件

重点:自定义硬件---新CD/DVD 使用ISO映像文件(自己下载的)

检查:网络适配器是否是NAT模式

5、Linux网络配置

先学习一下桥接模式和.net的区别:

(一) 桥接模式

在桥接模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机(主机和虚拟机处于对等地

位),它可以访问网内任何一台机器。在桥接模式下,我们往往需要为虚拟主机配置IP地址、子网掩码等(注

意虚拟主机的ip地址要和主机ip地址在同一网段)。

使用桥接模式的虚拟系统和主机的关系,就如同连接在一个集线器上的两台电脑;要让他们通讯就需要为虚拟系

统配置ip地址和子网掩码。如果我们需要在局域网内建立一个虚拟服务器,并为局域网用户提供服务,那就要选

择桥接模式。

但对于想进行种种网络实验的朋友这种模式是不太适合的,因为你无法对虚拟机的网络进行控制,它直接出去

了。

(二) NAT模式

NAT,是Network Address Translation的缩写,意即网络地址转换。使用NAT模式虚拟系统可把物理主机作为路由器访问互联网,NAT模式也是VMware创建虚拟机的默认网络连接模式。使用NAT模式网络连接时,VMware会在主机上建立单独的专用网络,用以在主机和虚拟机之间相互通信。虚拟机向外部网络发送的请求数据"包裹",都会交由NAT网络适配器加上"特殊标记"并以主机的名义转发出去,外部网络返回的响应数据"包裹",也是先由主机接收,然后交由NAT网络适配器根据"特殊标记"进行识别并转发给对应的虚拟机,因此,虚拟机在外部网络中不必具有自己的IP地址。从外部网络来看,虚拟机和主机在共享一个IP地址,默认情况下,外部网络终端也无法访问到虚拟机。此外,在一台主机上只允许有一个NAT模式的虚拟网络。因此,同一台主机上的多个采用NAT模式网络连接的虚拟机也是可以相互访问的。

5.1、设置虚拟网络

打开虚拟机---编辑器---虚拟网络编辑器

打开虚拟网络编辑器之后,选择’VMnet8’,然后点击右下角更改设置

在打开的 NAT 设置中填写网关地址:

勾选点击 使用本地 DHCP 服务将 IP 地址分配给虚拟机(D),然后点击 DHCP设置: (这个是动态IP 若设置静态不用选)

填写 起始 IP 地址结束 IP 地址,然后点击 确定:![]https://www.zmz2001.com:8000/back-programme/Linux/Linux-study-5.png)

Tips:上图中标注的 ip 地址范围要和前面子网 ip 处于同一个网段中。

5.2、配置网络中心

打开 网络中心,选择’VMnet8’,点击鼠标右键 属性

双击 Internet 协议版本4(TCP/IPv4)

如下图所示,填写好 ip 配置:

ip地址:192.168.19.1 这个ip地址前三位一定要和linux系统的ip前三位一致 否则主机pingLinux不通

子网掩码 和Vm的一致

默认网关 和Vm的一致

5.3、修改网络配置文件

修改为静态IP

下面进入网络配置目录 /etc/sysconfig/network-scripts,查看当前目录文件

#进入网络配置文件目录
cd /etc/sysconfig/network-scripts;

#查看当前目录文件
ls

#编辑网络配置文件
vi ifcfg-ens160

(ifcfg-ens32)

dhcp代表自动分配 手动给 变成static

ONBOOT网络服务是否随着虚拟机运行启动 改成yes 必须改

指明ip地址 打开编辑-虚拟网络编辑器NET模式下

IPADDR=192.168.163.xxx 静态IP 是多少自己定

NETMASK=255.255.255.0 与VM一致

GATEWAY= 网关 NET设置里有 与VM一致

DNS1=8.8.8.8

DNS2=4.4.4.4

配置DNS(上步操作配置了就不用配置了)

vi /etc/resolv.conf

nameserver xxxxxxx

重启网络服务!

systemctl restart network

二、Linux连接工具和登录

1、Linux终端工具

较为常见的 Linux 服务器终端连接工具有 xshellMobaXtermputty 等等

一般用xshell就可以了

2、Linux远程登录

2.1、SSH

Secure Shell 的缩写即为 SSH ,此网络安全协议是由 IETF 的网络小组(Network Working Group)制作修订的,SSH 为建立在应用层基础上的安全协议。SSH 相比较是可靠的,并且为远程登录会话以及其他的网络服务提供安全性的协议。利用 SSH 协议可以很有效地防止远程管理过程中的账号密码安全问题,SSH 最开始是在 UNIX 操作系统上的一个软件程序,后来快速发展至其他操作系统, SSH 在正确使用时可弥补网络中的漏洞 SSH 客户端适用于多种平台,几乎所有 UNIX 平台包括 HP-UXLinuxAIXSolarisDigital UNIXIrix,且都可运行 SSH。

2.2、如何本地电脑SSH命令远程登录Linux

首先确保前面配置好的 CentOs 处于开机状态,之前配置好的 ip 地址即为需要模拟的远程登录的 Linux 系统,登录命令如下:

ssh -p port user@ip

步骤:

按下 win + X 键,选择 Windows PowerShell

输入 ssh -p 22 root@192.168.19.11 按下回车键:

接下来输入之前安装的 CentOs 系统的 root 密码

输入 ip addr 查看当前连接系统 ip 地址:

输入 cat /etc/redhat-release 查看当前 CentOs 系统版本

三、Linux文件与目录管理

1、CentOS目录介绍

1.1、进入 root 目录

root 目录相当于 Windows 中我的电脑,命令如下

cd /root 表示切入到根目录下的 root 目录
ls 表示查看当前目录里面有哪些显示的文件

1.2、从root目录返回上一级目录

cd .. 表示切入到当前目录的上级目录

1.3、CentOS各个目录功能

目录名称功能与作用描述
/bin二进制应用程序目录,其中包含二进制文件 CentOS 系统所有用户使用的命令都在这个目录下。
/boot开机启动引导目录,启动 (boot) 配置文件,其中包括了 Linux 内核文件与开机所需要的文件。
/dev设备目录,设备 (device) 相关的文件和目录,其中包含了所有应用程序的配置文件,还包含了启动 / 停止某个程序的 shell 脚本。
/etc配置文件目录,配置文件、启动脚本等文件。
/home本地用户目录,所有不同权限的系统用户可在 home 目录分配存储个人用户的文件和资料。
/lib系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助。
/lost+fount系统异常产生错误时,会将一些遗失的片段放置于此目录下,通常这个目录会自动出现在装置目录下。如加载硬盘于 /disk 中,此目录下就会自动产生目录 /disk/lost+found 。
/media挂载可移动介质 (media),诸如 CD、数码相机,软盘,光盘等,可移除设备挂载目录。
/mnt挂载 (mounted) 文件系统,临时安装目录,系统的管理员可拥有挂载文件系统的权限。
/opt第三方软件安装目录,第三方应用程序一般放在此目录下,但实际中通常习惯放在 /usr/local 目录下。
/proc特殊的动态信息目录,此目录的数据都在内存中,如系统核心,外部设备,网络状态,用以维护系统信息和状态,包括当前运行中进程 (processes) 信息。
/rootroot 用户主文件夹,读作 “slash-root” ,其他用户均放置在 /home 目录下
/run系统运行的时候所需的文件,以前在 /var/run 中,后来拆分成独立的 /run 目录,重启后重新生成对应的目录数据。
/sbin重要的系统二进制 (system binaries) 文件,也是包含的二进制可执行文件。在这个目录下的 linux 命令通常都是由系统管理员使用的,对系统进行维护。
/srv服务启动后需要访问的数据目录。
/sys系统 (system) 文件,跟 proc 一样虚拟文件系统,记录核心系统硬件信息。
/tmp临时文件目录,存放临时文件目录,所有用户对该目录均可读写。
/usr应用程序放置目录,包含绝大部分所有用户 (users) 都能访问的应用程序和文件。
/var经常变化的 (variable) 文件,存放系统执行过程经常改变的文件,代表变量文件。在这个目录下可以找到内容可能增长的文件。

2、ls查看文件和目录列表

2.1、列出目录列表

显示当前目录下的文件目录列表命令: 命令列出来的目录排序默认是按字母的列排序

ls

2.2、列出有标记的目录列表

使用 ls -F 命令可以在列表出来的文件后面加上一个标识,这样再使用 ls 命令列出文件列表时,能快速知道列出的文件类型和作用:

ls -F

*表示可执行文件 
/表示目录  
=表示socker文件  
@表示软链接  
|表示FIFOs文件

2.3、列出包含隐藏文件的列表

可以使用 ls -a 命令列出当前目录包含隐藏文件的所有文件列表:

ls -a

2.4、使用多个参数列出文件列表

可以在 ls 命令后面跟上多个参数列出的文件列表筛选:

ls -F -R -a

或

ls -FRa

R:recursive 递归

2.5、使用ll命令显示文件列表详细信息

dr-xr-xr-x. 1 root root 7 5月 10 2019 bin -> usr/bin

ll 命令是 ls -l 的简写,它可以显示出文件的权限、属主、大小、最后修改时间等等信息:

ll

或

ls -l

2.5.1、文件类型

最左侧一列表示该文件的类型:

  • “-” 表示普通文件;
  • “d” 表示目录;
  • “l” 表示链接文件;
  • “p” 表示管理文件;
  • “b” 表示块设备文件。

2.5.2、文件属性

这里以 boot 目录为例,r-xr-xr-x 可以分为三部分 [r-x][r-x][r-x],其中的第一部分表示文件创建者/所有者对该文件所具有的的权限,第二部分表示创建者/所有者所在的组其他用户的权限,第三部分表示其他组的用户的权限。

  • r(Read,读取权限):若是文件,则表示可以读取文件内容,若是目录,则表示可以浏览目录;
  • w(Write,写入权限):若是文件,则表示可以新增、修改内容,若是目录,则表示可以删除、移动目录列表的权限;
  • x(Execute,执行权限):若是文件,则表示具有执行文件的权限,若是目录,则表示该用户拥有进入目录的权限。

2.5.3、目录/链接文件

  • 如果是目录那么这里的数量减 2 表示它下级目录或者文件的个数。
  • 如果是文件则表示指向它的链接文件的数量。

2.5.4、文件所有者

其中 root root 可以分为两部分,[root] [root],前面的 root 表示该文件或目录的所有者/创建者是 root 用户,后面的 root 表示该文件或目录所在的组是 root

2.5.5、文件的大小

  • 如果是则表示该文件的大小,单位是字节(byte)。
  • 如果是目录则表示该目录所占的空间大小,并不是指该目录下所有文件的大小。

Tips:1 字节(byte) = 8 比特(bit), 1 kb = 1024 bit。

2.5.6、修改日期

表示最后修改的时间,以 boot 目录为例,表示最后修改或者创建时间是 4 月 19 日 12:27

2.5.7、文件名称

表示文件名,其中 bin->usr/bin 表示软链接

2.5.8、字体颜色

  • 亮黄色表示设备文件;
  • 亮蓝色表示链接文件;
  • 灰蓝色表示目录;
  • 亮红色表示压缩文件;
  • 亮绿色表示可执行文件;
  • 灰白色表示普通文件。

2.6、ls命令参数介绍

下面列出比较常见的 ls 相关的参数仅供参考:

ls 命令参数名称功能与作用描述
-a表示 –all, 列出目录下的所有文件,包括以 . 开头的隐藏文件。
-A表示 -a,但不列出 .(表示当前目录) 和 .. (表示当前目录的上级目录)。
-c表示按照最后更改时间排序,可以使用 -l 显示出时间。
-f对输出的文件不进行排序。
-g类似 -l,列出目录信息。
-G表示 –no-group,不列出任何有关组的信息。
-h表示 –human-readable,与 -l 配合使用,如 ls -lh以容易理解的格式列出文件大小,如 10k、20M、100G。
-i表示 –inode,打印出每个文件的 inode 号。
-l除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来,ls -l 可以简写为 ll
-L表示 –dereference,当显示符号链接的文件信息时,显示符号链接所指示的对象而并非符号链接本身的信息。
-m所有文件或目录以 , 分隔,并填满整行行宽。
-o类似 -l,显示文件的除组信息外的详细信息。
-r表示 –reverse,按照当前排序顺序相反的顺序排列。
-R表示 –recursive,递归出所有子目录层。
-s表示 –size,以块大小为单位列出所有文件的大小。
-S根据文件大小排序。

3、cd路径操作

3.1、 pwd 查看当前所在目录的绝对路径

在对 Linux 目录操作过程中,可以使用 pwd 命令查看当前所处目录的 绝对路径

pwd

Tips:如图所示显示的绝对路径是以 / 开头的,/ 表示根目录。

3.2、cd 切换至下级目录

若想要进入当前目录的下一级某个目录,可以使用 cd 跟上相对路径,这里以切换至 usr 目录为例:

cd usr/
或
cd ./usr
或
cd usr

3.3、cd切换至上级目录的其他目录

前面已经切换至 /usr 目录了,若想要切换至 /var 目录则可以使用 ../ 来表示上级目录:

pwd

cd ../var/

pwd

ls

3.4、cd切换至绝对路径

可以使用 cd 跟上绝对路径切换至指定的绝对路径,这里以切换至 /etc/sysconfig/network-scripts 为例:

cd /etc/sysconfig/network-scripts

3.5、使用Tab键自动补全

若每一个目录名称一个个敲出来就会显得有些繁琐,这个时候就可以使用 Tab 键来自动补全了,演示结果如下图所示:

4、创建文件和目录

4.1、touch创建文件

实际业务中,有些应用程序写入日志时要求需要先存在指定的日志文件,创建文件命令如下:

touch error.log

4.2、mkdir创建目录

若想要创建一个目录,可以使用 mkdir 目录名 来创建一个新的空目录,命令如下:

mkdir new_dir

4.3、使用ls命令查看指定文件或目录信息

上面新创建的文件或目录可以使用 ls -l 命令指定地展示其信息:

ls -l error.log

ls -l new_dir

这两种方式创建出来的文件和目录都是空的,并且文件和目录的属主用户是当前登录的用户,并且文件默认的权限是 rw-r--r--,目录的默认权限是 rwxr-xr-x

5、删除文件和目录

5.1、删除文件

使用 rm 文件名 命令可以删除文件,以删除普通文件为例:

ls -l  # 列出当前目录下的所有文件
 
rm test.c  # 使用 rm 命令删除 test.c 文件

ls -l # 再次查看当前目录下的所有文件

5.2、强制删除文件

直接使用 rm 命令删除文件的话会提示你一次是否确定删除文件。使用 rm -f 可以不需要提示强制删除文件,以删除普通文件为例:

ls -l # 列出当前目录下的所有文件

rm -f a.out # 加上 -f 参数强制删除 a.out 文件

ls

Tips:实际业务中尽量不要使用 -f 删除文件,使用这种方式删除几乎不能恢复,所以删除文件时需要谨慎。

5.3、递归删除目录和子目录下所有文件

有时候需要删除多层目录以及目录下的文件,可以使用 rm -r 递归删除,以删除 /home/data 目录为例:

ls -l # 列出当前目录下的所有文件

cd /home/data # 进入 /home/data 目录

ls -l  # 列出当前目录下的所有文件

cd .. # 返回上一级目录

rm -rf data/ # 递归删除 data/ 目录下所有文件

ls

5.4、rm删除命令参数介绍

可以使用 rm --help 命令来查看 rm 相关的参数介绍:

rm --help

下面列举出 rm 常见的参数和描述,仅供参考:

rm 命令参数名称功能与作用描述
-f表示 --force,忽略不存在的文件和参数,不提示任何信息,强制删除。
-i进行任何删除操作前必须先确认。
-r/-R表示 --recursive,递归删除该目录下的所有目录层。
-d表示 --dir,删除可能包含有数据的目录。

6、移动文件和目录

6.1、移动文件或目录至另外一个目录下

可以使用 mv file_name 路径 这种格式,移动文件至其他目录下,后面跟的路径可以是相对路径,也可以是绝对路径,这里的路径操作和 cd 命令类似,下面介绍移动文件命令:

ls -l # 列出当前目录下所有文件

mv test.txt /usr/local # 使用 mv 命令将 text.txt 移动到 /usr/local 路径下

ls -l # 再次查看当前目录下的文件

cd /usr/local # 进入 /usr/local 文件夹下

ls -l # 查看 /usr/local 目录下的文件信息

6.2、带有覆盖提示的文件或移动

如果要移动的目标路径下有同名文件,若不想同名文件被覆盖,可以使用 -i 参数询问是否需要覆盖,这里可以自行在两个目录下创建同名的文件:

ls -l # 列出当前目录下所有文件

mv -i error.log study/ # 使用 -i 参数询问是否覆盖目标路径下的同名文件

ls -l # 再次查看当前目录下的文件

cd study/ # 进入 study/ 文件夹下

ls -l # 查看 study/ 目录下的文件信息

6.3、mv移动命令参数介绍

可以使用 mv --help 命令来查看 mv 相关的参数介绍:

mv --help

面列举出 mv 常见的参数和描述,仅供参考:

mv 命令参数名称功能与作用描述
-b若有文件覆盖时,则覆盖前先行备份。
-f表示 --force,强制的意思,若目标文件已存在,则不会询问直接覆盖掉。
-i表示 --interactive,若目标文件已经存在时,就会询问是否覆盖。
-n表示 --no-clobber,不会覆盖已经存在的文件。
-u表示 --update,若目标文件已经存在,且 source 比较新,才会更新
-t表示 --target,指定 mv 的目标目录,该选项适用于移动多个源文件到一个目录的情况,此时目标目录在前,源文件在后。

7、文件压缩与解压

7.1、tar命令介绍

下面列举 tar 命令的参数:

tar 命令参数名称功能与作用描述
-c新建立压缩档案
-x解压缩
-t查看内容
-u更新原压缩包的内容
-zgzip 属性的
-jbz2 属性的
-Zcompress 属性的
-v显示所有过程
-O将文件解压缩成标准输出形式
-f使用档案名字,此参数都是在最后,其后面跟上一个档案的名字

Tips:其中 -c-x-t-u 这五个参数是独立的,每次使用选其中一个,-f 是最后一个参数,后面跟上档案名。

7.1.1、将指定类型文件打包成tar包

为了演示方便,先切入到 /home 目录下,使用 touch 命令创建几个 .txt 文件,然后使用 tar 命令将其打包,命令如下:

cd /home

touch a.txt b.txt c.txt d.txt e.txt

ls -l

tar -cf alltxt.tar *.txt 

ls -l

Tips:其中 alltxt.tar 是一个自定义名称,后缀是 tar ,前半部分的名字可自行定义, *.txt 中的 * 表示通配符代表所有的意思。

7.1.2、向现有的tar包中新增文件

这里再使用 touch 命令创建一个 g.txt 文件,使用 tar 命令将其新增至 alltxt.tar 中,命令如下:

touch g.txt

tar -rf alltxt.tar g.txt

7.1.3、更新原来的tar包中的文件

使用 rm 命令删除 /home 目录中的 a.txt ,然后新建一个 a.txt 表示为更新后的 a.txt,使用 tar 命令将 a.txt 更新至 alltxt.tar 中,命令如下:

rm -f a.txt

touch a.txt

tar -uf alltxt.tar a.txt

Tips:若 alltxt.tar 中没有 a.txt,那么使用 tar -uf 就会将 a.txt 新增到 alltxt.tar 中。

7.1.4、列出tar包中打包的所有文件

这里为了演示方便,将 /home 目录原有的 .txt 文件全都删除掉,然后使用 tar 命令查看 alltxt.tar 中所有文件列表,命令如下:

ls

rm -f *.txt

ls

tar -tf alltxt.tar

7.1.5、解开tar包中所有文件

接着上面的内容,可以使用 tar 命令将 alltxt.tar 解开把文件释放到当前目录,命令如下:

ls

tar -xf alltxt.tar

ls

7.1.6、使用tar命令压缩

上面打包的 alltxt.tar 文件并没有压缩文件,只是把文件都打包在一起,如下命令可以把 alltxt.tar 压缩成为不同格式的压缩包:

ls

tar -czf alltxt.tar.gz alltxt.tar #将alltxt.tar通过gzip压缩为alltxt.tar.gz包

ls

tar -cjf alltxt.tar.bz2 alltxt.tar #将alltxt.tar通过bzip2压缩为alltxt.tar.bz2包

ls

tar -cZf alltxt.tar.Z alltxt.tar #将alltxt.tar通过compress压缩为alltxt.tar.Z包

ls

7.1.7、使用tar命令解压缩

对其解压缩,命令如下:

ls

tar -zxvf alltxt.tar.gz

ls

rm -f alltxt.tar

ls

tar -jxvf alltxt.tar.bz2

ls

rm -f alltxt.tar

ls

tar -Zxvf alltxt.tar.Z

ls

7.2、zip格式压缩与解压

CentOS 8 系统中自带 zipunzip 压缩与解压工具,可以使用 zip -vunzip -v 命令查看当前是否安装 zipunzip 工具,若是没有安装,则可以使用如下命令安装:

yum -y update

yum -y install zip unzip

7.2.1、使用zip压缩文件

使用 zip 命令可以将 alltxt.tar 包压缩为 .zip 压缩包,命令如下:

ls

zip alltxt.zip alltxt.tar

ls

7.2.2、使用unzip解压缩

命令如下:

unzip alltxt.zip

ls

8、文件和目录重命名

8.1、使用 mv 命令对文件名称

这里还是以 /home 目录的 alltxt.tar 文件为例,可以使用 mv 命令对其重命名:

ls

mv alltxt.tar newtxt.tar

ls

8.2、使用rename命令修改文件名称

首先下面先列出 rename 参数的功能描述,可以使用 rename --help 命令查看其参数:

rename --help

面列举了部分参数说明:

rename 命令参数名称功能与作用描述
-v表示 --verbose,打印修改之后文件的名称
-n表示 --no-act,测试命令,执行之后不会改变任何内容
-o表示 --no-overwrite,表示重命名之后不会覆盖原有文件

9、查找文件和目录

9.1、按照文件类型查找

使用 -type 参数可以查找不同类型的文件,其可以查找的文件类型如下:

find -type 文件类型介绍描述
f普通文件
d目录文件
l符号链接文件
b块设备文件
c字符设备文件
p管道文件
s套接字文件

这里以查找 /home 目录中的所有目录为例,使用 find 命令跟上 -type 来限制文件类型,命令如下:

cd /

find ./home -type d

9.2、按照文件名查找

使用 -name 参数可以按照文件名来查找,这里以查找 /home 目录下所有的 .txt 文件为例,命令如下:

cd /

find ./home -name *.txt

9.3、查找排除指定文件

可以在查找文件的时候使用 ! 取反来排除指定的文件,例如查找 /home 目录中除了 .txt 文件以外的所有文件,命令如下:

cd /

find ./home -name *.txt

find ./home ! -name a.txt

9.4、对查找到的文件执行操作

有时候需要对查找到的指定文件执行特定的操作:

cd /

find ./home -name *.txt

find ./home -name *.txt -exec rm {} \;

find ./home -name *.txt

10、查看文件内容

10.1、file查看文件类型

file 命令可以用来查看文件类型,还能查看文件的编码格式,下面列举一些 file 命令的参数:

file 命令参数名称功能与作用描述
-b表示 --brief,显示查看结果时,不显示文件名
-c表示 --checking-printout,显示指令执行过程
-f表示 --files-from FILE,列出文件中文件名的文件类型
-F表示 --separator STRING,使用指定符号替换输出文件名后的默认的
-i输出 mime 类型的字符串
-L表示 --dereference,查看对应软链接对应文件的文件类型
-z表示 --uncompress,尝试查看压缩文件信息

10.1.1、查看文件类型

这里还是以 /home 目录里面的文件为例,命令如下:

cd /home

ls

file a.txt

file new_dir

cd study/

file alltxt.tar

file alltxt.tar.gz

file alltxt.tar.bz2

file alltxt.tar.Z

10.1.2、查看文件时不显示文件名称

file 命令后面跟上一个 -b 参数重复一次上面的流程,命令如下:

cd /home

ls

file -b a.txt

file -b new_dir

cd study/

file -b alltxt.tar

file -b alltxt.tar.gz

file -b alltxt.tar.bz2

file -b alltxt.tar.Z

Tips:如图所示使用 -b 参数查看的文件信息时没有打印出文件名。

10.1.3、查看压缩包信息

使用 -z 参数去查看压缩包信息,命令如下:

cd /home/study

ls

file -z alltxt.tar.gz

file -z alltxt.tar.bz2

file -z alltxt.tar.Z

10.2、cat查看文件内容

cat 命令可以用来查看文件内容,下面列举一些 cat 命令的参数:

cat 命令参数名称功能与作用描述
-A表示 --show-all,展示所有内容
-b表示 --number-nonblank,对查看的内容的非空行,对其行数编号
-n表示 --number,对查看的内容行数编号输出
-v表示 --show-nonprinting,使用^ 和M- 引用,除了LFD和 TAB 之外
-E表示 --show-ends,在每行的最后展示KaTeX parse error: Expected 'EOF', got '符' at position 1: 符̲号;就是无论你输入了什么,屏幕…符号结尾
-e-vE
-s表示 --squeeze-blank,抑制空行输入,就是如果你有多行连续的空行,他会压缩成一行输出
-T表示 --show-tabs,将跳格字符显示为^I
-t-VT

10.2.1、查看文件所有内容

使用如下命令查看其中的内容:

cd /etc/sysconfig/network-scripts

ls

cat ifcfg-ens160

Tips:在输入路径或者文件名称的时候可以使用 Tab 键来补全。

10.2.2、对查看内容编排

命令如下:

cat -b ifcfg-ens160

cat -n ifcfg-ens160

10.3、more命令查看文件内容

more 命令也用来查看文件内容,下面列举一些 more 命令的参数:

more 命令参数名称功能与作用描述
+n从第 n 行开始显示
-n定义屏幕大小为 n 行
+/pattern在每个档案显示前搜寻该字串 pattern,然后从该字串前两行之后开始显示
-c从顶部清屏,然后显示
-d提示 Press space to continue,'q' to quit(按空格键继续,按q键退出),而禁用响铃功能
-l忽略 Ctrl+l(换页) 字符
-p通过清除窗口而不是滚屏来对文件进行换页,与 -c 选项相似
-s把连续的多个空行显示为一行
-u把文件内容中的下画线去掉

这里以查看 /etc/mtools.conf 文件内容为例,命令如下:

cd /etc

more mtools.conf

10.4、tail命令查看文件内容

tail 命令也用来查看文件内容,下面列举一些 tail 命令的参数:

tail 命令参数名称功能与作用描述
-f表示 `--follow[={namedescriptor}]`,该参数用于监听文件新增内容。
-c表示 --bytes=[+]NUM,从 num 字节位置读取指定文件
-n表示 --lines=[+]NUM,从 num 行位置读取指定文件。
-F-f
-q表示 --quiet,从不输出给出文件名的首部
-s表示 --sleep-interval=N,与-f合用,表示在每次反复的间隔休眠S秒

10.4.1、查看文件最后几行内容

/etc/mtools.conf 文件为例,如要查看最后 6 行内容,命令如下:

cd /etc

tail -5 mtools.conf

10.4.2、查看指定行数的内容

/etc/mtools.conf 文件为例,如要从第 45 行开始显示内容,命令如下:

tail -n +45 mtools.conf

10.4.3、监听日志文件

使用 tail 命令跟上 -f 参数对 access.log 日志文件监听,命令如下:

tail -f access.log

接下来在新打开的窗口中,进入 /home 目录,向 access.log 文件写入内容:

cd /home

echo "这是第一条测试内容(time=2020-05-05 18:00)" >> access.log

echo "这是第二条测试内容(time=2020-05-05 19:00)" >> access.log

echo "这是第三条测试内容(time=2020-05-05 20:00)" >> access.log

Tips:这种监听日志的方法经常用在后端程序开发调试工作中。

四、Linux编辑器

1、vim编辑器

1.1、vim编辑器简介

vim 编辑器是由 vi 发展而来的文本编辑器。它的功能有代码补全、编译、错误跳转等等,编其功能特别丰富,尤其在程序开发时被广泛使用,emacsvim 两款编辑器在 UNIX 系统中非常受欢迎。

vim 编辑器的命令组合是它的设计理念。同时 vim 编辑器与很多快捷键设置和正则表达式类似,可以辅助记忆,并且优化之后的 vim 编辑器针对程序员很友好。

通过对前面小节的学习我们知道,在 Linux 操作系统中 “一切皆文件”,所以当我们在命令行窗口模式下想要更改文件的内容时,就不可避免地要利用到文本编辑器,学习如何使用文本编辑器,将会对您学习 Linux 文件相关的知识非常有帮助。

1.2、检查LInux系统是否安装vim编辑器

使用如何命令检查 vim 编辑器是否安装:

vim -v

1.3、使用yum命令安装vim编辑器

使用 yum 命令安装 vim 编辑器命令如下:

yum -y install vim

1.4、vim编辑器用法介绍

1.4.1、vim编辑器三种模式

  • 普通模式:当你刚开始进入 vim 编辑器的时候默认会进入普通模式
  • 插入模式:在 vim 普通模式的时候,按下 i 键就可以进入插入模式,若想从 插入模式 回到 普通模式, 可以按下 ESC 键;
  • 命令模式:在普通模式下按下 : 键(Shift + :),若想从 命令模式 回到 普通模式,可以按下 ESC 键。

Tips:这三种模式其实就是文本编辑器当前的状态,普通模式 可以理解为一般的打开查阅文件,可以查看和查找文件内容,不能修改内容;插入模式 可以理解为编辑状态,能对当前的文件内容修改,但是想要保存就需要当前登录用户拥有该文件的写入权限才能保存成功;命令模式 中的命令操作可以理解为编辑器对编辑后的文件的退出、保存等操作,如 :wq 表示保存退出,:q! 表示不保存强制退出。

1.4.2、vim光标移动键介绍

  • h(或←):光标往左移动一个字符;
  • j(或↓):光标往下移动一行;
  • k(或↑):光标往上移动一行;
  • l(或→):光标往右移动一个字符;
  • PageDown(或 Ctrl + F):光标往下翻动一屏;
  • PageUp(或 Ctrl + B):光标往上翻动一屏;
  • G:光标往下移动到最后一行;
  • n G:光标移动到缓冲区的第 n 行;
  • gg:光标往上移动到第一行。

1.4.3、命令行模式下的命令介绍

  • q:表示退出,若有修改内容按 q,则会提示 E37: 已修改但尚未保存 (可用 ! 强制执行)
  • q!:表示强制退出,不会保存修改的内容;
  • w:表示对修改的内容保存;
  • wq:表示保存并退出。

Tips:输入以上命令后,按回车即可执行命令。

1.4.4、普通模式下的命令介绍

命令参数名称功能与作用描述
x删除当前光标所在位置的字符
dd删除当前光标所在行
dw删除当前光标所在位置的单词
d$删除当前光标所在位置至行尾的内容
J删除当前光标所在行行尾的换行符(拼接符)
u撤销前一编辑命令
a在当前光标后追加内容,输入完按 ESC 即可退出 插入模式
A在当前光标所在行行尾追加数据
r char用 char 替换当前光标所在位置的单个字符
R text用 text 覆盖当前光标所在位置的数据,输入完按 ESC 即可退出 插入模式

1.4.5、使用vim新建文件

进入 /home 目录,然后使用 vim 命令新建一个 new.log 文件,命令如下:

cd /home

ls

vim new.log

Tips:此时的 new.log 文件并没有被保存,vim 编辑器是在内存缓冲区中处理数据的,若在启动 vim 编辑器时没有指定文件名或者文件不存在时,vim 编辑器会开辟一个新的缓冲区。

1.4.6、使用vim编辑文件

在进入 vim 普通模式下,可以按下 i 键进入插入模式来编辑文件内容

1.4.7、vim编辑器保存退出

编辑完内容之后按下 ESC 键退出插入模式,然后输入 :wq 按回车之后既可以保存退出:

如使用 vim 编辑器查看文件内容时,可以按下 ./ 然后输入关键字回车可以查找关键字

2、nano编辑器

2.1、检查Linux系统中是否安装nano编辑器

使用如何命令检查 nano 编辑器是否安装:

nano -v

2.2、使用yum命令安装nano编辑器

使用 yum 命令安装 nano 编辑器命令如下:

yum -y install nano

2.3、nona编辑器控制命令介绍

命令参数名称功能与作用描述
Ctrl + C显示光标在文件中的位置信息
Ctrl + G显示 nano 编辑器的帮助窗口
Ctrl + J调整当前文本段落
Ctrl + K剪切文本行,并将其保存在剪切缓冲区
Ctrl + O将当前文本编辑缓冲区的内容写入文件
Ctrl + R将文件读入当前文本编辑缓冲区
Ctrl + T启动可用的拼写检查器
Ctrl + U将剪切缓冲区中的内容放入当前行
Ctrl + V翻动到文本编辑缓冲区中的下一页内容
Ctrl + W在文本编辑缓冲区中搜索单词或短语
Ctrl + X关闭当前文本编辑缓冲区,退出 nano 编辑器
Ctrl + Y翻动到文本编辑缓冲区中的上一页内容

Tips:可以在 nano 编辑器界面使用 Ctrl + G 显示更多的命令。

2.4、使用nano编辑器修改文件内容

进入 /home 目录,使用 nano 命令查看 new.log 文件内容,命令如下:

cd /home

ls

nano new.log

Tips:如图所示编辑完自己想要修改的内容之后按下 Ctrl + X 输入 y 回车即可保存退出。

3、emacs编辑器

3.1、检查Linux系统中是否安装emacs编辑器

命令检查 emacs 编辑器是否安装:

emacs -v

3.2、使用yum命令安装emacs编辑器

使用 yum 命令安装 emacs 编辑器命令如下:

yum -y install emacs

3.3、emacs窗口栏介绍

栏目名功能与作用描述
File允许你在窗口中打开文件、创建新窗口、关闭窗口、保存缓冲区和打印缓冲区
Edit允许你将选择的文本剪切并赋值到剪切板,将剪切板的内容粘贴到光标当前所在位置,以及查找文本和替换文本
Options提供许多 emacs 功能设定,如高亮显示、自动换行、光标类型和字体设置
Buffers列出当前可用的缓冲区,可以让你在缓冲区域轻松切换
Tools提供对 emacs 高级功能的访问,比如命令行界面访问、拼写检查、文件内容比较(称为diff)、发送电子邮件消息、日历以及计算器
Help提供 emacs 的在线手册,以获取特定 emacs 功能的帮助

3.4、使用emacs编辑器修改文件内容

进入 /home 目录,使用 emacs 命令查看 new.log 文件内容,命令如下:

cd /home

ls

emacs new.log

3.5、三种编辑器对比

vimnanoemacs 这三种编辑器相比来说,vim 编辑器与很多快捷键设置和正则表达式类似,可以辅助记忆,并且优化之后的 vim 编辑器针对程序员很友好;nano 编辑器比较轻巧,拥有基本的功能;emacs 编辑器对文件的操作有点类似在 Widnwos 中的文本编辑器,三者可以结合使用。

一般就用vim就可以了

五、Linux进程和磁盘管理

1、Linux查看进程

1.1、进程概念简介

进程(Process)是系统中进行资源的分配和调度的基本单位,是系统中的软件程序对某些数据集合的运行活动,是操作系统结构的基础。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。其定义如下:

  • 狭义定义:进程是正在运行的程序的实例;
  • 广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。

1.2、启动一个进程

这里以启动一个 nginx 服务为例,首先使用 yum 命令安装 nginx 软件,命令如下:

yum -y install nginx

已经安装好了 nginx 之后,可以使用如下命令启动 nginx 服务:

service nginx start

启动 nginx 之后可以使用本机浏览器访问,但在访问之前需要先将 Linux 防火墙关闭,命令如下:

systemctl stop firewalld

systemctl status firewalld

1.3、查看进程

在启动一个软件进程之后,可以使用 ps 命令查看启动软件的进程,命令如下:

ps -aux | grep nginx

1.4、ps命令参数介绍

Centos操作系统中进程的状态有五种:

  • 运行:正在运行或在运行队列中等待;
  • 中断:休眠中,受阻,在等待某个条件的形成或接受到信号;
  • 不可中断:收到信号不唤醒和不可运行, 进程必须等待直到有中断发生;
  • 僵死:进程已终止, 但进程描述符存在, 直到父进程调用 wait4() 系统调用后释放;
  • 停止:进程收到SIGSTOP,SIGSTP,SIGTIN,SIGTOU 信号后停止运行运行。

ps 命令可以用来查看进程相关信息,下面列举一些 ps 命令的参数:

ps 命令参数名称功能与作用描述
-a显示现行终端机下的所有程序,包括其他用户的程序。
-A显示所有程序。
-c列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
-e此参数的效果和指定 A 参数相同。 例如: ps -e
e列出程序时,显示每个程序所使用的环境变量。
f用ASCII字符显示树状结构,表达程序间的相互关系。
-H显示树状结构,表示程序间的相互关系。
-N显示所有的程序,除了执行ps指令终端机下的程序之外。
-s采用程序信号的格式显示程序状况。
-S列出程序时,包括已中断的子程序资料。
-u以用户为主的格式来显示程序状况。
-x显示所有程序,不以终端机来区分。

Tips:使用上述一个或者多个参数可以查看到指定的进程信息。

1.5、实时监测进程

上面介绍的 ps 命令只能查看输入命令那一刻获取到的进程信息,而 top 命令可以实时监测进程信息:

执行结果如下图

如上图所示展示的是实时进程监测信息,下面对这些信息进程说明:

  • PID:进程号或进程ID;
  • USER:进程属主的名字;
  • PR:进程的优先级;
  • NI:进程的谦让度值;
  • VIRT:进程占用的虚拟内存总量;
  • RES:进程占用的物理内存总量;
  • SHR:进程和其他进程共享的内存总量;
  • S:进程的状态,D 表示可中断的休眠状态,R 表示运行状态,S 表示休眠状态,T 表示跟踪状态或停止状态,Z 表示僵化状态;
  • %CPU:进程使用的 CPU 时间比例;
  • %MEM:进程使用的内存占可用内存的比例;
  • TIME+:自进程启动到目前为止 CPU 时间总数;
  • COMMAND:进程所对应的命令行名称,也就是程序启动时的程序名。

Tipstop 命令展示出来的信息默认是按照 %CPU 的值从大到小排序的。

2、Linux结束进程

2.1、Linux进程信号介绍

下面列举出 Linux 进程信号的描述:

信号名称描述
1HUP挂起
2INT中断
3QUIT结束运行
9KILL无条件终止
11SEGV段错误
15TERM尽可能终止
17STOP无条件停止运行,但不终止
18TSTP停止或暂停,但继续在后台运行
19CONT在 STOP 或 TSTP 之后恢复执行

2.2、查看进程的PID

里还是以之前启动的 nginx 进程为例,使用 ps 查看 nginx 命令如下:

ps -ef | grep nginx

Tips:如图所示,可以看到有三条 nginx 相关信息信息,其中 PID 为 12512 这一列表示的是当前打开窗口的进程,1247112472 这两个 PID 无法直接判断是否是之前启动 nginx 服务的 PID,下面可以使用端口号去确认进程 PID。

2.3、端口号概念

所谓的端口,就好像是门牌号一样,客户端可以通过 ip 地址找到对应的服务器端,但是服务器端是有很多端口的,每个应用程序对应一个端口号,通过类似门牌号的端口号,客户端才能真正的访问到该服务器。为了对端口进行区分,将每个端口进行了编号,这就是端口号 。

2.4、通过进程PID查找端口号

nginx 软件服务启动之后默认的端口号是 80,可以使用如下命通过 PID 查找到端口号,命令如下:

netstat -anp | grep 12471

2.5、kill结束进程

前面查找到进程的 PID 之后,可以使用 kill 命令杀死进程,命令如下:

kill -9 12471

ps -ef | grep nginx

2.6、killall结束进程

killall 命令可以直接通过进程相关的名称来结束进程,先启动 nginx 服务之后,然后使用 killall 杀掉 nginx 相关的进程,命令如下:

service nginx start

ps -ef | grep nginx

killall nginx

ps -ef | grep nginx

Tips:实际业务中 killall 使用时需要谨慎,防止 root 权限误操作误杀其他进程。

3、Linux磁盘空间

3.1、df命令

若想要知道磁盘空间使用情况,可以使用 df 命令,df 命令可以很方便地查看到磁盘空间使用情况。

3.1.1、df命令参数介绍

下面列举了一些 df 命令参数作用:

df 命令参数名称功能与作用描述
-a表示 --all,显示所有的文件系统,包括虚拟文件系统。
-B表示 --block-size=SIZE,指定单位大小。比如 1K,1M 等。
-h表示 --human-readable,以人们易读的GB、MB、KB等格式显示。
-H表示 --si,和-h参数一样,但是不是以 1024,而是 1000,即 1k=1000,而不是 1k=1024。
-i表示 --inodes,不用硬盘容量,而是以 inode 的数量来显示
-kKB 的容量显示各文件系统,相当于 --block-size=1k
-l表示 --local,只显示本地文件系统。
-P表示 --portability,使用 POSIX 格式显示。
-t表示 --type=TYPE,只显示指定类型的文件系统。
-T表示 --print-type,显示文件系统类型。
-x表示 --exclude-type=TYPE,不显示指定类型的文件系统。

3.1.2、查看系统磁盘空间使用情况

可以使用 df -h 命令查看 Linux 磁盘空间使用情况,命令如下:

df -h
  • 文件系统:表示的含义是设备的设备文件位置
  • 容量:表示的含义是能容纳的空间大小
  • 已用:表示的含义是已经用了多少空间大小
  • 可用:表示的含义是还有多少空间大小可用
  • 已用%:表示的含义是已经占用的空间比例
  • 挂载点:表示的含义是设备挂载了那个挂载点上

3.2、du命令

使用 du 命令可以显示某个目录下磁盘使用情况,这样可以快速是否存在某个占用空间的超大文件。

3.2.1、du命令参数介绍

下面列举了一些 du 命令参数的作用:

du 命令参数名称功能与作用描述
-a表示 --all,列出所有的文件和目录容量大小而不仅仅列出目录容量大小,默认情况只是统计目录的容量大小。
-B表示 --block-size=SIZE,指定单位大小。
-b表示 --bytes,以字节为单位列出文件和目录的容量大小。
-c表示 --total,除了列出文件和目录的容量大小外,列出总的容量大小。
-h表示 --human-readable,以人们易读的方式 (KB、MB、GB) 显示容量大小。
-k以 KB 为单位。
-m以 MB 为单位。
-s表示 --separate-dirs,仅列出总量,而不列出每个目录和文件的大小
-S表示 --summarize,和-s参数类似,但是统计时不包含子目录的容量大小。

3.2.2、查看目录占用磁盘空间大小

可以使用 du 命令显示,某些目录使用磁盘空间情况,命令如下:

du  -m | sort -nr

Tipsdu -m | sort -nr 中的 -m 表示以 MB 单位展示,| sort -nr 表示使用管道对展示结果按大小排序。

4、Linux挂载

4.1、挂载概念介绍

挂载是指由操作系统使一个存储设备(如硬盘)上的计算机文件和目录可供用户通过计算机的文件系统访问的一个过程。一般来说,当计算机关机时,每个已挂载存储都将经历一次卸载,以确保所有排队的数据被写入,并保证介质上文件系统结构的完整性。挂载指的就是将设备文件中的顶级目录连接到 Linux 根目录下的某一目录(最好是空目录),访问此目录就等同于访问设备文件目录。

4.2、mount命令参数介绍

mount 命令参数名称功能与作用描述
-a挂载 /etc/fstab 中的所有文件系统。
-f使 mount 命令模拟挂载设备,但不真正的挂载。
-F-a 参数一起使用时,会同时挂载所有文件系统。
-v详细模式,将会说明挂载设备的每一步。
-I不启用任何 /sbin/mount.filesystem 下的文件系统帮助文件。
-lext2ext3XFS 文件系统自动添加文件系统标签。
-n挂载设备,但不注册到 /etc/mtab 已挂载设备文件中。
-p num进行加密挂载时,从文件描述符 num 中获得密码短语。
-s忽略该文件系统不支持的挂载选项。
-r将设备挂载为只读。
-w将设备挂载为可读可写(默认参数)。
-L label将设备按指定的 label 挂载。
-U uuid将设备按指定的 uuid 挂载。
-O-a 参数一起使用,限制命令只作用到特定的一组文件系统上。
-o给文件系统添加特定的选项。

4.3、查看当前系统上挂载的设备列表

可以使用 mount 命令查看当前系统上挂载的设备列表,命令如下:

mount

Tipsmount 命令展示出来的信息主要包含 媒体的设备名媒体挂载到虚拟目录的挂载点文件系统类型已挂载媒体的访问状态

下面对挂载的设备信息列举说明:

  • ro:以只读形式挂载;
  • rw:以读写形式挂载;
  • user:允许普通用户挂载文件系统;
  • check=none:挂载文件系统时不进行完整性校验;
  • loop:挂载一个文件。

4.4、手动挂载媒体设备

下面以挂载某一个设备的目录 /new/test/media/soft 下为例,命令如下:

mount -ft vfat /new/test  /media/soft

Tips:使用上述命令,没有任何提示信息,因为这里使用的的 -f 参数是模拟挂载,实际业务中可参照此方法去挂载新设备目录。

4.5、卸载设备目录

使用 mount 可以挂载一个设备目录,而使用 unmount 可以将其卸载,命令如下:

unmount /media/soft

Tipsunmount 命令除了可以卸载某个目录,也可以跟上设备名称来卸载。

六、Linux环境变量

1、Linux环境变量介绍

1.1、环境变量概念简介

环境变量是指在操作系统中用来指定操作系统运行环境的某些参数,环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息

和 Windows 系统中的 PATH 环境变量类似,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到 PATH 中指定的路径去找,用户通过设置环境变量,来更好的运行程序。环境变量相当于给系统或用户应用程序设置的一些参数,具体起到什么作用和环境变量具体的值有关。

1.2、全局环境变量介绍

全局环境变量是指在操作系统中,全局可见的环境变量,这些环境变量对应着某些值,可以直接使用这些环境变量去代替这些值来获取相应的数据,全局环境变量可以用于进程的所有子 shell,全局环境变量对于某些父 shell 来说,它们创建的子 shell 想要获取父 shell 时,这些局部环境变量就非常有用了,系统环境变量的命名规则一般都是大写字母加下划线组成,可以使用 printenv 命令和 env 查看系统所有的全局变量。

1.3、局部环境变量介绍

局部变量只能在定义这些变量的进程里面可见,这些局部变量在其他进程可能就不可见了,局部变量和全局变量都是系统中特别重要的,用户可以在需要的时候自定义自己需要用到的局部变量。使用 set 命令查看当前进程所有能使用的环境变量,这些变量包含全局环境变量和局部环境变量。局部变量的作用域被限定在创建它们的 shell 中。

2、Linux查看环境变量

2.1、查看全局环境变量

2.1.1、使用 printenv 命令查看全局变量,命令如下:

printenv

Tips:上述展示的是全部的环境变量,后面小节自定义变量之后可以使用自定义变量去执行某些命令。

2.1.2、printenv命令查看指定全局环境变量

使用 printenv 命令查看上述前几个全局变量,命令如下:

printenv LS_COLORS

printenv XDG_MENU_PREFIX

printenv LANG

printenv GDM_LANG

printenv HISTCONTROL

printenv DISPLAY

2.1.3、env命令查看所有全局环境变量

使用 env 命令查看全局变量,命令如下:

env

2.1.4、echo命令查看指定全局环境变量

使用 echo 命令查看上述前几个全局变量,命令如下:

echo $LS_COLORS

echo $XDG_MENU_PREFIX

echo $LANG

echo $GDM_LANG

echo $HISTCONTROL

echo $DISPLAY

Tips:注意使用 echo 输出环境变量,后面的变量名前面需要带上 $

2.2、查看局部环境变量

局部变量只能在定义这些变量的进程里面可见,这些局部变量在其他进程可能就不可见了,局部变量和全局变量都是系统中特别重要的,用户可以在需要的时候自定义自己需要用到的局部变量。使用如下命令查看当前进程所有能使用的环境变量,命令如下:

set

3、Linux配置环境变量

3.1、环境变量命令规范

在 Linux 系统中的 bash shell 有个惯例,全部的系统环境变量名都使用大写字母和 _ 组成,若是自定义的局部环境变量或者 shell 脚本,则一般使用小写字母和 _ 组成,这样写的好处是自定义系统变量可以避免覆盖原有的系统全局变量,对生产环境业务造成严重的影响。系统的环境变量可以通过 = 赋值,这些值可以是数字,也可以是字符串,变量名=变量值 三者之间不能有空格。

3.2、配置局部环境变量

使用 ssh 方式登录了 CentOs 8 系统之后,就会创建一个 shell 进程,默认的 shell 程序就开始运行了,然后就可以在该 shell 进程内自定义局部变量。

3.2.1、赋值一个局部变量

登录 CentOs 终端之后,可以使用 = 赋值的方式自定义局部变量,命令如下:

echo $my_val

my_val=nice

echo $my_val

Tips:注意 变量名= 之间不能有空格,若变量值中间有空格,则赋值的时候需要将变量的值用 " 包起来,如 my_val="very good",若不用 " 包起来,则空格前面和后面会被隔开当做是 Linux 命令处理了,会出现异常。

3.2.2、在shell子进程中赋值局部变量

在当前 shell 进程中的子进程中赋值命令如下:

my_val="nice"

echo $my_val

bash

my_val="nice son"

echo $my_val

exit

echo $my_val

执行结果如下图:

Tips:在 shell 子进程中赋值的变量,在子进程结束之后,这个子进程中的局部变量值就会销毁。

3.3、配置全局环境变量

3.3.1、使用export设置全局环境变量

上述 shell 子进程中赋值的变量若想要在子进程结束的时候不销毁,则可以使用如下命令设置为全局变量,命令如下:

test_val="dog"

echo $test_val

bash

echo $test_val

exit

export test_val

bash

echo $test_val

exit

Tips:注意在 shell 子进程中不可使用 export 命令,注意此时其他新打开的 shell 进程窗口无法读到 $test_val 变量。

3.3.2、设置所有新窗口 shell 进程中能查看的全局环境变量

/etc/profile 文件中可配置全局环境变量,使用 vim 命令打开 /etc/profile 文件,在文件末尾添加 test_val="my test dog",命令如下:

vim /etc/profile

如上图所示配置好之后,执行如下命令:

source /etc/profile

echo $test_val

4、Linux删除环境变量

4.1、删除全局环境变量

/etc/profile 文件中添加的 test_val=my_test_dog 变量是一个全局环境变量,可以使用 unset 命令删除这个全局环境变量,命令如下:

echo $test_val

unset test_val

echo $test_val

Tips:因为 test_val 变量的值在文件 /etc/profile 中,被 unset 命令删除之后,可以重新使用 source /etc/profile 命令更新权限,重新获取到 test_val 变量的值。

4.2、在shell 子进程中删除环境变量

shell 子进程中可以使用 unset 命令删除指定的环境变量名,命令如下:

new_val="imooc"

export new_val

bash # shell子进程

echo $new_val

unset new_val

echo $new_val

exit

echo $new_val # 不会影响父shell
imooc

七、Linux权限管理

1、Linux 用户介绍

1.1、用户类型

Linux 系统是一个多用户多任务的操作系统,在 Linux 系统中一般可将用户分为 root 用户普通用户两大类。root 用户 是 Linux 系统中的系统管理员用户,root 用户 在登录终端工具时,命令行前面显示 #

普通用户 在登录终端工具时,命令行前面显示 $

1.2、查看 Linux 有哪些用户

Linux 系统中 /etc/passwd 文件保存的就是系统中所有的用户主要信息,这些信息以 : 分隔,可以使用 cat 命令查看其中的信息,命令如下:

cat /etc/passwd

每行代表一个用户,这些用户中的绝大多数是系统或服务正常运行所必需的用户,我们把这种用户称为系统用户或伪用户。系统用户是不能登录系统的,但是这些用户同样也不能被删除,因为一旦删除,依赖这些用户运行的服务或程序就不能正常执行,会导致系统问题。

/etc/passwd 文件中每行用户包含的信息如下:

  • 登录用户名;
  • 用户账户的 UID;
  • 用户账户的组 ID;
  • 用户账户的描述;
  • 用户家目录的位置;
  • 用户的默认 shell。

以第一行为例,root:x:0:0:root:/root:/bin/bash 中包含的信息有 用户名是 root密码标志 xUID 0组ID(GID) 0用户描述 root家目录位置 /root默认shell /bin/bash,第二行最后的 nologin 表示这个用户不能登录(有些不能登录的用户可以用作启动某个软件进程)。

1.3、查看Linux用户信息

Linux 中 /etc/shadow 文件上保存了每个用户的信息,该文件只有 root 用户才能访问,这个文件中包含每个用户的一条记录信息,使用 cat 命令查看:

cat /etc/shadow

这些信息以 : 分隔,/etc/shadow 文件中每行用户包含的信息如下:

  • 用户名(和 /etc/passwd 对应);
  • 密码(已被加密),这个字段是非空的;
  • 上次修改口令的时间(距离 1970 年 1 月 1 日的天数);
  • 两次修改口令间隔最少的天数,如果这个字段的值为空,帐号永久可用;
  • 提前多少天警告用户口令将过期,如果这个字段的值为空,帐号永久可用;
  • 在口令过期之后多少天禁用此用户,如果这个字段的值为空,帐号永久可用;
  • 用户过期日期,表示用户作废的天数(距离 1970 年 1 月 1 日的天数),如果这个字段的值为空,帐号永久可用;
  • 保留字段,目前为空,以备将来发展之用。

2、Linux添加用户

2.1、useradd命令

若想要添加 Linux 系统普通用户,可以使用 useradd 命令,使用 root 账号登录 Linux 系统之后就可以添加系统普通用户了。

2.1.1、useradd 命令参数介绍

下面列举了一些 useradd 命令参数作用:

useradd 命令参数名称功能与作用描述
-b表示 --base-dir,新用户主目录的基目录
-c表示 --comment,给新用户添加备注
-d表示 --home-dir, 新账户的家目录
-D表示 --defaults,显示或更改默认的 useradd 配置
-e表示 --expiredate,用 YYYYY-MM-DD 格式指定一个账户过期的日期
-f表示 --inactive_days,指定这个帐户密码过期后多少天这个账户被禁用,0表示密码一过期就立即禁用,-1表示禁用这个功能
-g表示 --gid GROUP,指定用户登录组的GID或组名
-G表示 --groups,指定用户除登录组之外所属的一个或多个附加组
-k表示 --skel,使用此目录作为骨架目录
-K表示 --key,不使用 /etc/login.defs 中的默认值
-l表示 --no-log-init,不要将此用户添加到最近登录和登录失败数据库
-m表示 --create-home,创建用户的家目录
-M表示 --no-create-home,不创建用户的家目录(当默认设置里指定创建时,才用到)
-N表示 --no-user-group,不创建同名的组
-o表示 --non-unique,允许使用重复的 UID 创建用户
-p表示 --password,为用户账户指定默认密码
-r表示 --system,创建一个系统账户
-s表示 --shell,shell 指定默认登录 shell
-u表示 --uid,为账户指定一个唯一的 UID
-U表示 --user-group,创建与用户同名的组
-Z表示 --selinux-user,为 SELinux 用户映射使用指定名字

若使用 useradd 命令不指定参数,则新添的用户默认参数如下:

  • 新用户 GID 默认为 100;
  • 新用户的家目录位于 /home/用户名
  • 新用户密码过期后不会被禁用;
  • 新用户账户没有被设置过期日期;
  • 新用户将 bash shell 作为默认 shell

2.1.2、添加用户

可以使用 useradd 命令新增 Linux 系统普通用户,命令如下:

useradd study_linux

执行结果如下图:

/etc/passwd 文件中展示的用户信息,下面查看 /etc/shadow 文件中记录的用户信息,命令如下:

tac /etc/shadow

2.2、passwd 命令设置用户密码

可以使用 passwd 命令给上述 study_linux 用户设置用户密码,命令如下:

passwd study_linux

2.3、切换当前登录用户

若想要从当前登录用户直接切换到另外一个用户,可以使用 su 命令,以切换到 study_linux 用户为例,命令如下:

su study_linux

2.4、sudo命令介绍

sudo 是 Linux 系统管理指令,是允许系统管理员让普通用户执行一些或者全部的 root 命令的一个工具,如 halt,reboot,su 等等。这样不仅减少了 root 用户的登录和管理时间,同样也提高了安全性。sudo 不是对 shell 的一个代替,它是面向每个命令的。下面演示一个普通用户执行 root 权限的过程,过程命令下:

cat /etc/shadow # 使用普通用户直接查看 /etc/shadow 会提示权限不够

sudo cat /etc/shadow # 使用 sudo 执行 root 权限

su root # 切换 root 用户

执行结果如下图:

Tips:之前提到过 /etc/shadow 只有 root 权限才能访问。

如上图所示切换至 root 用户之后,可以在 /etc/sudoers 文件中设置 study_linux 用户的 sudo 权限,首先使用 Vim 打开 /etc/sudoers 文件,命令如下:

vim /etc/sudoers

执行结果如下图:

保存退出之后,切换至 study_linux 用户,重新执行之前查看 /etc/shadow 文件的过程,命令如下:

su study_linux

cat /etc/shadow

sudo cat /etc/shadow

3、Linux删除用户

3.1、userdel 命令

若想要删除 Linux 系统普通用户,可以使用 userdel 命令,使用 root 账号登录 Linux 系统之后就可以删除系统普通用户了。

3.1.1、userdel 命令参数介绍

下面列举了一些 userdel 命令参数作用:

userdel 命令参数名称功能与作用描述
-f表示 --force,强制删除用户
-r表示 --remove,删除主目录和邮件池
-Z表示 --selinux-user,为用户删除所有的 SELinux 用户映射

3.1.2、删除用户

使用 userdel 命令删除 Linux 系统普通用户,命令如下:

userdel -rf study_linux # 强制删除用户和用户相关的主目录

su study_linux

3.2、禁止用户登录

若不想直接删除用户,只是想禁止用户登录,可以修改 /etc/passwd 文件,先新建一个账户,然后修改 /etc/passwd 文件,新增用户命令如下:

useradd test_linux
passwd text_linux

修改 /etc/passwd 文件中的 test_linux 用户信息,可以禁止它登录,命令如下:

vim /etc/passwd

4、Linux修改用户

4.1、用户修改相关命令

下面列举了一些修改用户信息相关的命令:

命令名称功能与作用描述
usermod修改用户的字段值,并且可以指定用户的组和其他所属的关系
passwd修改已经存在的用户的密码
chpasswd读取文件中登录名密码对,更新密码
chage修改用户密码过期日期
chfn修改用户的备注信息
chsh修改用户默认登录的 shell

4.2、usermod 修改用户信息

4.2.1、usermod 命令参数介绍

下面列举了一些 usermod 命令参数作用:

usermod 命令参数名称功能与作用描述
-l修改用户的登录名
-L禁止指定用户登录
-p将加密过的密码 (PASSWORD) 设为新密码
-U使禁用的用户能够登录

4.2.2、修改用户名

下面演示一下 -l-U 参数修改 test_linux 用户的用户名,然后使其能够登录,命令如下:

usermod -l new_linux test_linux

4.3、修改密码

4.3.1、passwd 修改密码

使用 useradd 新增用户,并使用 passwd 命令修改新增用户的密码,命令如下:

useradd user_name01

passwd user_name01

4.3.2、chpasswd 批量修改密码

首先使用 vim 命令新建好批量需要修改的用户名密码对,命令如下:

vim /home/user_pwd.txt

使用 chpasswd 命令批量修改用户的密码,命令如下:

chpasswd < /home/user_pwd.txt

4.4、修改用户默认shell

这里以 user_name01 用户为例,修改其默认 shell,命令如下:

cat /etc/shells

chsh -s /bin/sh user_name01

4.5、修改用户备注

4.5.1、chfn 修改用户备注信息

可以给用户备注 名称办公办公电话住宅电话,命令如下:

su root

chfn user_name01

4.5.2、查看用户备注信息

可以在 /etc/passwd 文件查看上述备注的用户信息,命令如下:

grep user_name02 /etc/passwd

4.6、用户有效期

4.6.1、chage命令

下面列举了一些 chage 命令参数作用:

chage 命令参数名称功能与作用描述
-d表示 --lastday 最近日期,将最近一次密码设置时间设为 最近日期
-E表示 --expiredate 过期日期,将帐户过期时间设为 过期日期
-I表示 --inactive INACTIVE,过期 INACTIVE 天数后,设定密码为失效状态
-l表示 --list,显示帐户年龄信息
-m表示 --mindays 最小天数,将两次改变密码之间相距的最小天数设为 最小天数
-W表示 --warndays 警告天数,将过期警告天数设为 警告天数

4.6.2、设置密码过期的日期

使用 chage -E 可以设置用户过期日期,命令如下:

grep user_name02 /etc/shadow

chage -E 2020-05-30 user_name02

grep user_name02 /etc/shadow

5、Linux用户组

5.1、用户组介绍

Linux 是多任务多用户的操作系统,可以理解为在 Linux 系统中支持多个用户在同一时间内在不同的终端登陆,并且不同用户可以调用不同的任务,它们之间互不影响

不同的 Linux 用户权限不同,毎个用户可以执行指定权限范围内的任务,Linux 系统通过这种权限的管理划分,实现了多用户多任务的运行机制。因此,如果要使用 Linux 系统的资源,就需要向系统管理员申请一个用户。

通过建立不同权限的用户,可以合理地利用和控制系统资源,还能帮助用户组织文件,提供对用户文件的安全性保护。用户组是具有相同特征用户的逻辑集合,简单的理解,有时我们需要让多个用户具有相同的权限,例如新建、删除、修改、查看文件的权限,可以分别对多个用户进行文件访问授权,但如果用户多了,挨个的给用户授权这种方式就不太合理。

最好的方式是建立一个组,让这个组具有新建、删除、修改、查看文件的权限,然后将所有需要访问此文件的用户放入这个组中,每个组都会有唯一的 GID这样所有组中用户就具有了和组一样的权限

5.2、查看Linux用户组

Linux 系统中 /etc/group 文件保存的就是系统中所有的用户组的主要信息,和用户文件 /etc/passwd 类似,这些信息以 : 分隔,可以使用 cat 命令查看其中的信息,命令如下:

cat /etc/group

Tips:如上图所示,每行代表一个用户组。

/etc/group 文件中每行用户包含的信息如下:

  • 组名;
  • 组密码(以 x 表示);
  • 组 ID(GID);
  • 属于该组的用户列表。

Tips:组密码允许非组内的成员通过它临时使用该组的权限。

5.3、查看Linux用户组信息

Linux 中 /etc/gshadow 文件上保存了每个用户组的信息,该文件和 /etc/shadow 类似,只有 root 用户才能访问,这个文件中包含每个用户组的一条记录信息,使用 cat 命令查看:

cat /etc/gshadow

这些信息以 : 分隔,/etc/gshadow 文件中每行用户包含的信息如下:

  • 组名;
  • 加密密码;
  • 组管理员;
  • 组附加用户列表。

5.4、查看用户的ID信息

若想要查看某一个 Linux 用户的 组ID(GID)用户ID(UID) ,可以使用 id 命令,命令如下:

id root

id user_name01

id user_name02

Tips:最后的字段 组=gid 表示的是用户所在组,这里既可以看到初始组,如果有附加组,则也能看到附加组。

6、Linux添加用户组

6.1、groupadd 命令

若想要添加 Linux 用户组,可以使用 groupadd 命令,使用 root 账号登录 Linux 系统之后就可以添加用户组了。

6.1.1、 groupadd 命令参数介绍

下面列举了一些 groupadd 命令参数作用:

groupadd 命令参数名称功能与作用描述
-f表示 --force,如果组已经存在,会提示成功创建的状态
-g表示 --gid GID,为新组设置 GID,若 GID 已经存在会提示 GID 已经存在
-o表示 --non-unique,允许创建有重复 GID 的组
-p表示 --password PASSWORD,为新组使用此加密过的组密码
-r表示 --system,创建一个系统账户

6.1.2、 添加用户组

可以使用 groupadd 命令新增 Linux 系统普通用户,命令如下:

groupadd study_group

6.2、向用户组中添加用户

usermod -G 可以将用户添加到用户组当中,命令如下:

usermod -G study_group user_name01

grep study_group /etc/group

Tips:如果改了已经正在登陆的用户所属的组,则需要下次重新登录才会生效。

7、Linux修改用户组

7.1、 groupmod 命令介绍

下面列举了一些 groupmod 命令参数作用:

groupmod 命令参数名称功能与作用描述
-f表示 --force,如果组已经存在,会提示成功创建的状态
-g表示 --gid GID,将组 ID 改为 GID
-n表示 --new-name NEW_GROUP,改名为 NEW_GROUP
-o表示 --non-unique,允许使用重复的 GID
-p表示 --password PASSWORD,将密码更改为(加密过的) PASSWORD

7.2、修改用户组组名

使用 groupmod -n 命令可以修改用户组组名,命令如下:

grep study_group /etc/group # 查看组名为 study_group 的组信息

groupmod -n new_group_name study_group

grep study_group /etc/group

grep new_group_name /etc/group

7.3、修改用户组GID

使用 groupmod -g 命令可以修改用户组组名,命令如下:

grep new_group_name /etc/group

groupmod -g 10086 new_group_name

grep new_group_name /etc/group

8、Linux删除用户组

8.1、groupdel 删除用户组

使用 groupdel 命令删除群组,其实就是删除 /etc/gourp 文件和 /etc/gshadow 文件中有关目标群组的数据信息,删除群组命令如下:

grep new_group_name /etc/group

groupdel new_group_name

groupdel -f new_group_name

grep new_group_name /etc/group

9、Linux文件权限介绍

9.1、ls -l 查看文件权限相关信息

进入 /home 目录,使用如下命令,查看文件权限相关的信息:

cd /home

ls -l

执行结果如下图所示:

其中 root root 可以分为两部分,[root] [root],前面的 root 表示该文件或目录的所有者/创建者是 root 用户,后面的 root 表示该文件或目录所在的用户组是 root

9.2、文件信息介绍

这里以 new_dir 目录为例,rwxr-xr-x 可以分为三部分 [r-x][r-x][r-x],其中的第一部分表示文件创建者/所有者对该文件所具有的权限为 rwx,表示可读取、写入、执行;第二部分表示创建者/所有者所在的组其他用户的权限为 r-x,表示可读取、执行,但不可写入;第三部分表示其他组的用户的权限为 r-x 表示可读取、执行,但不可写入,目录 new_dir 权限解读示例图如下图:

  • r(Read,读取权限):若是文件,则表示可以读取文件内容,若是目录,则表示可以浏览目录;
  • w(Write,写入权限):若是文件,则表示可以新增、修改内容,若是目录,则表示可以删除、移动目录列表的权限;
  • x(Execute,执行权限):若是文件,则表示具有执行文件的权限,若是目录,则表示该用户拥有进入目录的权限。

10、Linux修改文件权限

10.1、Linux 文件权限值

在上述权限中的文件读、写、执行权限信息中,对应着二进制数值,对应关系如下表:

权限展示值二进制值八进制值描述
---0000表示没有读、写、执行权限
--x0011表示有执行权限,没有读、写权限
-w-0102表示有写,没有读、执行权限
-wx0113表示有写、执行权限,没有读权限
r--1004表示有读权限,没有写、执行权限
r-x1015表示有读、执行权限,没有写权限
rw-1106表示有读、写权限,没有执行权限
rwx1117表示有读、写、执行权限

10.2、umask 命令

在 Linux 系统中创建一个新的文件或者目录的时候,它们都会有默认的访问权限,umask 命令则可以修改这些文件默认的访问权限。例如用户创建一个文件的默认访问权限为 rw-rw-rw-(八进制值666) ,创建目录的默认权限 rwxrwxrwx(八进制值777) ,而 umask 值则表明了需要从默认权限中去掉哪些权限来成为最终的默认权限值。

10.2.1、umask 命令查看默认权限去除值

使用 umask 命令可以查看一个默认的权限信息,命令如下:

umask

当前文件或目录权限相关的是默认去除值是 0022,其中第一位 0 表示的是一项特殊安全权限,暂且不讨论。

后面三位 022 则和普通权限 rwx 有关,其中后三位中的第一位 0 表示创建者/所有者相关的权限,表示从用户权限去掉 0 对应的权限 ---(不变),后三位中的第二位 2 表示用户组相关的权限,表示从用户组权限去掉 2 对应的权限-w-(写权限),后三位中的第三位 2 表示和其他用户的权限有关,表示其他用户的权限去掉 2 对应的权限 -w-(写权限)

所以创建 文件 的默认八进制值 666(rw-rw-rw-) 去掉 022(----w--w-) 对应的相关权限之后为 644(rw-r--r--),创建 目录 的默认八进制值 777(rwxrwxrwx) 去掉 022(----w--w-) 对应的相关权限之后为 755(rwxr-xr-x),下面通过示例来验证一下:

umask

touch testfile

ls -l testfile

mkdir testdir

ls -l

Tipsumask 命令展示出来表示从原来的默认值去除的权限值,新建文件默认的权限值是 666,新建目录的权限值是 777umask 命令展示的值是在这个基础之上去除的。

10.2.2、umask 命令修改默认去除权限

若想要新建的文件有指定的初始默认权限,可以使用 umask 命令,命令如下:

umask 226

umask

新建文件默认的权限值是 666,新建目录的权限值是 777226 表示在这个基础上去除
-w--w-rw- 之后的权限。

10.3、chmod命令

10.3.1、修改文件权限

新建一个文件 newfile,然后使用 chmod 命令修改文件权限,新建和修改文件权限命令如下:

touch newfile

ls -l newfile

chmod 777 newfile

ls -l newfile

10.3.2、修改目录权限

使用 chmod 命令修改目录的权限,修改目录权限命令如下:

ls -l

chmod -R 755 study

ls -l

10.3.3、chmod 命令限定权限

chmod 命令可以修改已经存在的文件或目录的权限,可以分别修改它们用户的权限、用户组的权限、其他用户的权限,也可以修改上述全部的权限,下图表示 chmod 权限相关的操作:

下面以新增文件其他用户写权限为例,命令如下:

ls -l testfile

chmod o+w testfile

ls -l testfile

10.3.4、chmod 权限作用对象

  • u 表示用户;
  • g 表示用户组;
  • o 表示其他用户;
  • a 表示全部。

10.3.5、权限操作相关符号

  • + 表示在现有权限基础上增加权限;
  • - 表示在现有权限基础上移除权限;
  • = 表示在现有权限基础上设置成等号后的权限。

10.3.6、权限设置值

  • r 表示读权限;
  • w 表示写权限;
  • x 表示执行权限。

11、Linux修改文件所属关系

11.1、chown 命令

若想要修改文件的属主,可以使用 chown 命令,修改了文件属主之后,文件的权限信息也相应的会被修改。

11.1.1、 修改文件的属主

若只想要修改文件的所有者,则可以使用 chown 命令修改文件的属主,这里新建一个文件 newtestfile 为例,然后修改这个文件属主:

touch newtestfile

ls -l newtestfile

useradd newuser

chown newuser newtestfile

ls -l newtestfile

Tips:若是修改目录的属主,则需要加上 -R 参数表示递归所有子目录,如 chown -R new_dir

11.1.2、同时修改文件的属主和所属组

若想要同时修改文件或目录的属主和用户组,也可以使用 chown 命令修改,这里新建一个文件 groupfile 为例,然后同时修改属主和所属组,命令如下:

touch groupfile

ls -l groupfile

useradd fileuser

groupadd filegroup

usermod -G filegroup fileuser

chown -R fileuser:filegroup groupfile

ls -l groupfile

只有 root 用户能够修改文件的属主。并且任何的属主都能修改它文件的所属组,但有一个前提是属主必须是原所属组和目标所属组的成员。

11.2、chgrp 修改文件或目录的默认属组

可以直接使用 chgrp 命令修改文件的所属组,接着上面的 groupfile 文件为例,命令如下:

ls -l groupfile

groupadd newgroup

usermod -G newgroup fileuser

chgrp newgroup  groupfile

ls -l groupfile

八、Linux文件系统管理

1、Linux文件系统介绍

1.1、df 命令显示文件系统类型

使用 df -T -h 命令可以查看当前文件系统的类型,命令如下:

 df  -T -h

执行结果详解:

  • 第一列 文件系统 表示的含义是 设备的设备文件位置
  • 第二列 类型 表示的含义是 文件系统类型(图中类型包含 devtmpfs、tmpfs、xfs、ext4、iso9660)
  • 第三列 容量 表示的含义是 能容纳的空间大小
  • 第四列 已用 表示的含义是 已经用了多少空间大小
  • 第五列 可用 表示的含义是 还有多少空间大小可用
  • 第六列 已用% 表示的含义是 已经占用的空间比例
  • 第七列 挂载点 表示的含义是 设备挂载了那个挂载点上

1.2、ext 文件系统介绍

Linux 操作系统最开始引入的文件系统是扩展文件系统,记作 ext,它可以使用虚拟的目录操作硬件设备。ext 文件系统采用索引节点存放虚拟目录中存储的文件信息,索引节点系统在每个物理设备中创建一个单独的表(称为索引节点表)来存储这些文件信息,存储在虚拟目录中的每一个文件在索引节点表有一个条目。ext 文件系统中的 extended 部分来自其跟踪的每个文件的额外数据,这些数据包括:

  • 文件大小;
  • 文件的属主;
  • 文件的访问权限;
  • 指向存有文件数据的每个硬盘块的指针;
  • 文件名;
  • 文件所在的属组。

Linux 通过唯一的数值(称作索引节点号)来引用索引节点表中的每个索引节点,这个值是创建文件时由文件系统分配的。文件系统通过索引节点号而不是文件全名及路径来标识文件。

1.3、ext2 文件系统介绍

使用最开始的 ext 文件系统有很多的限制(如文件最大不能超过2GB),所以在 Linux 系统出现后,很快就有了 第二代拓展文件系统,记作 ext2ext2 文件系统是 ext 文件系统基本功能的一个扩展,而且保持了 ext 文件系统一样的结构,ext2 文件系统扩展了索引节点表的格式来保存系统上每个文件的更多信息。

ext2 的索引节点表为文件添加了创建时间、修改时间和最后一次访问的时间帮助系统来追踪文件的访问情况。ext2 文件系统还将允许的最大文件大小增加到了 32 TB(Linux 2.6 之前是 2TB),以容纳数据库服务器中常见的大文件。除了额外扩展的索引节点外,ext2 文件系统还改变了文件在数据块中存储的方式。ext 文件系统在读取文件时不需要为了数据块查找整个物理设备。

1.3.1、ext2 文件系统特点

  • 当创建 ext2 文件系统时,系统管理员可以根据预期的文件平均长度来选择最佳的块大小(从1024B~4096B)。例如,当文件的平均长度小于几千字节时,块的大小为 1024B 是最佳的,因为这会产生较少的内部碎片——也就是文件长度与存放块的磁盘分区有较少的不匹配。另一方面,大的块对于 大于几千字节的文件通常比较合合适,因为这样的磁盘传送较少,因而减轻了系统的开销。
  • 当创建 ext2 文件系统时,系统管理员可以根据在给定大小的分区上预计存放的文件数来选择给该分区分配多少个索引节点。这可以有效地利用磁盘的空间。
  • 文件系统把磁盘块分为组。每组包含存放在相邻磁道上的数据块和索引节点。正是这种结构,使得可以用较少的磁盘平均寻道时间对存放在一个单独块组中的文件并行访问。
  • 在磁盘数据块被实际使用之前,文件系统就把这些块预分配给普通文件。因此当文件的大小增加时,因为物理上相邻的几个块已被保留,这就减少了文件的碎片。
  • 支持快速符号链接。如果符号链接表示一个短路径名(小于或等于 60 个字符),就把它存放在索引节点中而不用通过由一个数据块进行转换。

1.3.2、ext2 文件系统健壮性特点

文件更新策略的谨慎实现将系统崩溃的影响减到最少。我们只举一个例子来体现这个优点:例如,当给文件创建一个硬链接时,首先增加磁盘索引节点中 的硬链接计数器,然后把这个新的名字加到合适的目录中。在这种方式下,如果在更新索引节点后而改变这个目录之前出现一个硬件故障,这样即使索引节点的计数 器产生错误,但目录是一致的。因此,尽管删除文件时无法自动收回文件的数据块,但并不导致灾难性的后果。如果这种处理的顺序相反更新索引节点前改变目录,同样的硬件故障将会导致危险的不一致,删除原始的硬链接就会从磁盘删除它的数据块,但新的目录项将指向一个不存在的索引节点。如果那个索引节点号以 后又被另外的文件所使用,那么向这个旧目录的写操作将毁坏这个新的文件。

在启动时支持对文件系统的状态进行自动的一致性检查。这种检查是由外部程序 e2fsck 完成的,这个外部程序不仅可以在系统崩溃之后被激活,也 可以在一个预定义的文件系统安装数每次安装操作之后对计数器加 1 之后被激活,或者在自从最近检查以来所花的预定义时间之后被激活。

支持不可变 immutable 的文件不能修改、删除和更名和仅追加 append-only 的文件只能把数据追加在文件尾。

既与 Unix System V Release 4(SVR4) 相兼容,也与新文件的用户组 ID 的 BSD 语义相兼容。在 SVR4 中,新文件采用创建它的进程的用户组 ID;而在 BSD 中,新文件继承包含它 的目录的用户组 ID。ext2 包含一个安装选项,由你指定采用哪种语义。

2、Linux日志文件系统

2.1、ext3 文件系统介绍

ext3 文件系统是第三代扩展文件系统(Third extended filesystem,缩写为 ext3),它是一个日志文件系统,经常被用于 Linux 操作系统中,它是很多 Linux 发行版的默认文件系统。Stephen Tweedie 在 1999 年 2 月将该文件系统从 2.4.15 版本的内核开始,合并到内核主线中,它是对 ext2 系统的扩展,并且它兼容 ext2

日志式文件系统的优越性在于:由于文件系统都有快取层参与运作,若不使用时必须将文件系统卸下,以便将快取层的资料写回磁盘中,因此每当系统要关机时,必须将其所有的文件系统全部 shutdown 后才能进行关机,若在文件系统尚未 shutdown 前就关机如(停电)时,下次重开机后会造成文件系统的资料不一致,故这时必须做文件系统的重整工作,将不一致与错误的地方修复。

然而,此一重整的工作是相当耗时的,特别是容量大的文件系统,而且也不能百分之百保证所有的资料都不会流失,此类文件系统最大的特色就是它会将整个磁盘的写入动作完整记录在磁盘的某个区域上,以便有需要时可以回溯追踪。当在某个过程中被中断时,系统可以根据这些记录直接回溯并重整被中断的部分,而不必花时间去检查其他的部分,故重整的工作速度相当快,几乎不需要花时间。

2.1.1、ext3 日志文件系统特点

  • 高可用性:系统使用了 ext3 文件系统后,即使在非正常关机后,系统也不需要检查文件系统。宕机发生后,恢复 ext3 文件系统的时间只要数十秒钟。
  • 数据的完整性ext3 文件系统能够极大地提高文件系统的完整性,避免了意外宕机对文件系统的破坏。在保证数据完整性方面,ext3 文件系统有两种模式可供选择。其中之一就是 同时保持文件系统及数据的一致性 模式。采用这种方式,你永远不再会看到由于非正常关机而存储在磁盘上的垃圾文件。
  • 文件系统的速度:尽管使用 ext3 文件系统时,有时在存储数据时可能要多次写数据,但是,从总体上看来,ext3ext2 的性能还要好一些。这是因为 ext3 的日志功能对磁盘的驱动器读写头进行了优化。所以,文件系统的读写性能较之 ext2 文件系统并来说,性能并没有降低。
  • 数据转换:由 ext2 文件系统转换成 ext3 文件系统非常容易,只要简单地键入两条命令即可完成整个转换过程,用户不用花时间备份、恢复、格式化分区等。用一个 ext3 文件系统提供的小工具 tune2fs,它可以将 ext2 文件系统轻松转换为 ext3 日志文件系统。另外,ext3 文件系统可以不经任何更改,而直接加载成为 ext2 文件系统。
  • 多种日志模式ext3 有多种日志模式,一种工作模式是对所有的文件数据及 metadata(定义文件系统中数据的数据,即数据的数据)进行日志记录(data=journal 模式);另一种工作模式则是只对 metadata 记录日志,而不对数据进行日志记录,也即所谓 data=ordered 或者 data=writeback 模式。系统管理人员可以根据系统的实际工作要求,在系统的工作速度与文件数据的一致性之间作出选择。

2.2、ext4 文件系统介绍

ext4 是第四代扩展文件系统(Fourth extended filesystem,缩写为 ext4),它是 Linux 系统下的日志文件系统,是 ext3 文件系统的后继版本。ext4 是由 ext3 的维护者 Theodore Tso 领导的开发团队实现的,并引入到 Linux2.6.19 内核中。ext4 产生原因是开发人员在 ext3 中加入了新的高级功能,但在实现的过程出现了一些重要问题:

  • 一些新功能违背向后兼容性;
  • 新功能使 ext3 代码变得更加复杂并难以维护;
  • 新加入的更改使原来十分可靠的 ext3 变得不可靠。

由于上述原因,从 2006 年 6 月份开始,开发人员决定把 ext4ext3 中分离出来进行独立开发。ext4 的开发工作从那时起开始进行,但大部分 Linux 用户和管理员都没有太关注这件事情,直到 2.6.19 内核在 2006 年 11 月的发布。ext4 第一次出现在主流内核里,但是它当时还处于试验阶段,因此很多人都忽视了它。

2008 年 12 月 25 日,Linux Kernel 2.6.28 的正式版本发布。随着这一新内核的发布,ext4 文件系统也结束实验期,成为稳定版。

2.2.1、ext4 文件系统的特点

  • 更大的文件系统和更大的文件ext3 文件系统最多只能支持 32TB 的文件系统和 2TB 的文件,根据使用的具体架构和系统设置,实际容量上限可能比这个数字还要低,即只能容纳 2TB 的文件系统和 16GB 的文件。而 ext4 的文件系统容量达到 1EB,而文件容量则达到 16TB,这是一个非常大的数字了。对一般的台式机和服务器而言,这可能并不重要,但对于大型磁盘阵列的用户而言,这就非常重要了。
  • 更多的子目录数量ext3 目前只支持 32000 个子目录,而 ext4 取消了这一限制,理论上支持无限数量的子目录。
  • 更多的块和i-节点数量ext3 文件系统使用 32 位空间记录块数量和 i-节点数量,而 ext4 文件系统将它们扩充到 64 位。
  • 多块分配:当数据写入到Ext3文件系统中时,Ext3的数据块分配器每次只能分配一个4KB的块,如果写一个 100MB 的文件就要调用 25600 次数据块分配器,而Ext4的多块分配器 Multiblock Allocator(MBAlloc) 支持一次调用分配多个数据块。
  • 持久性预分配:如果一个应用程序需要在实际使用磁盘空间之前对它进行分配,大部分文件系统都是通过向未使用的磁盘空间写入 0 来实现分配,比如 P2P 软件。为了保证下载文件有足够的空间存放,常常会预先创建一个与所下载文件大小相同的空文件,以免未来的数小时或数天之内磁盘空间不足导致下载失败。而 ext4 在文件系统层面实现了持久预分配并提供相应的 API,比应用软件自己实现更有效率。
  • 延迟分配ext3 的数据块分配策略是尽快分配,而 ext4 的策略是尽可能地延迟分配,直到文件在缓冲中写完才开始分配数据块并写入磁盘,这样就能优化整个文件的数据块分配,显著提升性能。
  • 盘区结构ext3 文件系统采用间接映射地址,当操作大文件时,效率极其低下。例如,一个 100MB 大小的文件,在 ext3 中要建立 25600 个数据块(以每个数据块大小为 4KB 为例)的映射表,而 ext4 引入了盘区概念,每个盘区为一组连续的数据块,上述文件可以通过盘区的方式表示为 该文件数据保存在接下来的 25600 个数据块中,提高了访问效率。
  • 新的i-节点结构ext4 支持更大的 i-节点。之前的 ext3 默认的 i-节 点大小 128 字节,ext4 为了在 i-节点 中容纳更多的扩展属性,默认 i-节点 大小为 256 字节。另外,ext4 还支持快速扩展属性和 i-节点 保留。
  • 日志校验功能:日志是文件系统最常用的结构,日志也很容易损坏,而从损坏的日志中恢复数据会导致更多的数据损坏。ext4 给日志数据添加了校验功能,日志校验功能可以很方便地判断日志数据是否损坏。而且 ext4ext3 的两阶段日志机制合并成一个阶段,在增加安全性的同时提高了性能。
  • 支持无日志模式:日志总归会占用一些开销。ext4 允许关闭日志,以便某些有特殊需求的用户可以借此提升性能。
  • 默认启用Barrier:磁盘上配有内部缓存,以便重新调整批量数据的写操作顺序,优化写入性能,因此文件系统必须在日志数据写入磁盘之后才能写 Commit 记录。若 Commit 记录写入在先,而日志有可能损坏,那么就会影响数据完整性。 ext4 文件系统默认启用 Barrier,只有当 Barrier 之前的数据全部写入磁盘,才能写 Barrier 之后的数据。
  • 在线碎片整理:尽管延迟分配、多块分配和盘区功能可以有效减少文件的碎片,但碎片还是不可避免会产生。ext4 支持在线碎片整理,并将提供 e4defrag 工具进行个别文件或整个文件系统的碎片整理。
  • 支持快速fsck:以前的文件系统版本执行 fsck 时很慢,因为它要检查所有的 i-节点,而 ext4 给每个块组的i-节点 表中都添加了一份未使用i-节点的列表,所以 ext4 文件系统做一致性检查时就可以跳过它们而只去检查哪些在使用的 i-节点,从而提高了速度。
  • 支持纳秒级时间戳ext4 之前的扩展文件系统的时间戳都是以秒为单位的,这已经能够应付大多数设置,但随着处理器的速度和集成程度(多核处理器)不断提升,以及 Linux 开始向其他应用领域发展,它将时间戳的单位提升到纳秒。ext4 给时间范围增加了两个位,从而让时间寿命在延长 500 年,ext4 的时间戳支持的日期到 2514 年 4 月 25 日,而 ext3 只达到 2038 年 1 月 18 日。

2.3、ReiserFS 文件系统介绍

ReiserFS 是一种新型的文件系统,它通过一种与众不同的方式,完全平衡树结构来容纳数据,包括文件数据,文件名以及日志支持。ReiserFS 还以支持海量磁盘和磁盘阵列,并能在上面继续保持很快的搜索速度和很高的效率。与 ext2 相比,ReiserFS 有先进的日志 (Journaling/logging) 功能 机制。日志机制保证了在每个实际数据修改之前,相应的日志已经写入硬盘。文件与数据的安全性有了很大提高。

2.3.1、ReiserFS 文件系统的特点

  • 高效的磁盘空间利用ReiserFS 对一些小文件不分配 inode。而是将这些文件打包,存放在同一个磁盘分块中。而其它文件系统则为每个小文件分别放置到一个磁盘分块中。这意味着:如果有 10000 个小文件,就要占用 10000 个分块,有点浪费磁盘空间。
  • 独特的搜寻方式ReiserFS 基于快速平衡树 (balanced tree) 搜索,平衡树在性能上非常卓越,这是一种非常高效的算法。Reiser 搜索大量文件时,搜索速度要比 ext2 快得多。ReiserFS 文件系统使用 B*Tree 存储文件,而其它文件系统使用 B+Tree 树。B*Tree 查询速度比 B+Tree 要快很多。ReiserFS 在文件定位上速度非常快。
    在实际运用中,ReiserFS 在处理小于 1k 的文件时,比 ext2 快 8 到 15 倍,ReiserFS 几乎在各个方面都优于 ext2
  • 支持海量磁盘:ReiserFS 是一个非常优秀的文件系统,可轻松管理上百 G 的文件系统,ReiserFS 文件系统最大支持的文件系统尺寸为 16TB。这非常适合企业级应用中。
  • 优异的性能:由于它的高效存储和快速小文件 I/O 特点,使用 ReiserFS 文件系统的 PC,在启动 X 窗口系统时,所花的时间要比在同一台机器上使用 ext2 文件系统少 1/3。另外,ReiserFS 文件系统支持单个文件尺寸为 4G 的文件,这为大型数据库系统在 linux 上的应用提供了更好的选择。
  • 搜寻方式ReiserFS 是基于平衡树 (STree) 的文件系统结构,尤其对于大量文件的巨型文件系统,如服务器上的文件系统,搜索速度要比 ext2快,ext2 使用局部的二分查找法,综合性能比不上 ReiserFS。在 Reiser4 中还运用了文件即是目录的设计来管理 meta-data,并且运用了 Hans Reiser 自己发明的 Dancing B-tree ,效率提升非常明显。
  • 空间分配和利用情况ReiserFS 里的目录是完全动态分配的,因此不存在 ext2 中常见的无法回收巨型目录占用的磁盘空间的情况。ReiserFS 里小文件(< 4K)可以直接存储进树,小文件读取和写入的速度更快,树内节点是按字节对齐的,小的文件可共享同一个硬盘块,节约大量空间。ext2 使用固定大小的块分配策略,也就是说,不到 4K 的小文件也要占据4K的空间,导致的空间浪费比较严重。
  • 缺点:出现异常断电的时候,会出现大量的未写入完全的数据。ReiserFS 会在恢复的时候进行 rebuild-tree。而这个过程是非常慢的。在 ReiserFS 的升级版本 Reiser4 中有所改观。

2.3.2、ReiserFS 与 ext3 的比较

从技术层面来讲两者文件系统有很大的不同,但对于很多人来说,关注其中几点即可:

  • 第一,是你可以很方便地从 ext2 格式进行升级,因为到目前为止,很多 Linux 发行套件仍然在使用这种文件系统。
  • 第二,就是 ext3 不仅可以记录数据日志(这在 ext2 中就已经具备),而且在此基础上还可以记录元数据 (Metadata)日志。现在的 ReiserFS 则只有日志元数据。
  • 第三,就是文件系统的可扩展性。在介绍第三点以前,让我们先来看一看前两个不同点,因为第三点值得我们特别关注。就 ext3 来说,它可以方便地从 ext2 文件系统进行升级转换是其一大优势。当然,对于一直使用 ReiserFS 的人来说,这没有什么意义。但是,大多数用户并不愿意尝试使用 ext3 以外的任何一种日志文件系统。原因很简单,把 ext2 转换到 ext3 要比转换成其它任何一种文件系统更简单、快捷。

2.4、JFS 文件系统介绍

JFS( JOURNAL FILE SYSTEM),一种字节级日志文件系统,借鉴了数据库保护系统的技术,以日志的形式记录文件的变化。JFS通过记录文件结构而不是数据本身的变化来保证数据的完整性。这种方式可以确保在任何时刻都能维护数据的可访问性。

2.4.1、JFS 体系结构和设计

  • 体系结构和设计JFS 体系结构可从磁盘布局特性的角度进行说明。
  • 逻辑,卷所有文件系统讨论的基础是某种类型的逻辑卷。
  • 聚集和文件集,文件系统创建实用程序 mkfs,创建了完全包含在分区内的聚集。聚集是包含一种特定格式的磁盘块阵列,其格式包括超级块和分配映射表。超级块将分区标识成 JFS 聚集,而分配映射表描述聚集内每个数据块的分配状态。格式还包括描述它所必需的初始文件集和控制结构。文件集是可安装的实体。
  • 文件、目录、inode 与寻址结构,文件集包含文件和目录。文件和目录由 inode 持续表示,每个 inode 描述文件或目录的属性,并作为查找磁盘上文件或目录数据的起始点。JFS 还使用 inode 来表示其它文件系统对象,如描述文件集中每个 inode 的分配状态和磁盘位置的映射表。目录将用户特定的名称映射到为文件和目录所分配的 inode 上,并且形成传统的命名层次。文件包含用户数据,用户数据中没有隐含任何限制或格式。也就是说,JFS 将用户数据看成是未解释的字节流。根植于 inode 基于盘区的寻址结构用来将文件数据映射到磁盘。聚集超级块和磁盘分配映射表、文件描述符和 inode 映射表、inode、目录以及寻址结构一起表示了 JFS 控制结构或元数据。
  • 日志,在每个聚集中维护 JFS 日志,并且用来记录元数据的操作信息。日志有一种同样由文件系统创建实用程序设置的格式。聚集内多个安装的文件集可以同时使用一个日志。

2.5、XFS 文件系统介绍

XFS 一种高性能的日志文件系统,最早于 1993 年,由 Silicon Graphics 为他们的 IRIX 操作系统而开发,是 IRIX 5.3 版的默认文件系统。2000 年 5 月,Silicon GraphicsGNU 通用公共许可证发布这套系统的源代码,之后被移植到 Linux 内核上。XFS 特别擅长处理大文件,同时提供平滑的数据传输。SGI 发现他们的现有文件系统(existing filesystem,EFS)正在迅速变得不适应当时激烈的计算竞争。为解决这个问题,SGI 决定设计一种全新的高性能 64 位文件系统,而不是试图调整 EFS 在先天设计上的某些缺陷。因此,XFS 诞生了,并于 1994 年随 IRIX 5.3 的发布而应用于计算。

2.5.1、XFS 文件系统的特点

  • 数据完全性,采用 XFS 文件系统,当意想不到的宕机发生后,首先,由于文件系统开启了日志功能,所以你磁盘上的文件不再会意外宕机而遭到破坏了。不论目前文件系统上存储的文件与数据有多少,文件系统都可以根据所记录的日志在很短的时间内迅速恢复磁盘文件内容。
  • 传输特性XFS 文件系统采用优化算法,日志记录对整体文件操作影响非常小。XFS 查询与分配存储空间非常快。XFS 文件系统能连续提供快速的反应时间。笔者曾经对 XFSJFSExt3ReiserFS 文件系统进行过测试,XFS 文件文件系统的性能表现相当出众。
  • 可扩展性XFS 是一个全 64-bit 的文件系统,它可以支持上百万 T 字节的存储空间。对特大文件及小尺寸文件的支持都表现出众,支持特大数量的目录。最大可支持的文件大 小为 263 = 9 x 1018 = 9 exabytes,最大文件系统尺寸为 18 exabytesXFS 使用高的表结构(B+ 树),保证了文件系统可以快速搜索与快速空间分配。XFS 能够持续提供高速操作,文件系统的性能不受目录中目录及文件数量的限制。
  • 传输带宽XFS 能以接近裸设备 I/O 的性能存储数据。在单个文件系统的测试中,其吞吐量最高可达 7GB 每秒,对单个文件的读写操作,其吞吐量可达 4GB 每秒。

2.5.2、XFS 文件系统的缺点

历史上 XFS 上的元数据操作曾比其它文件系统都慢,表现为在删除大量小文件时性能糟糕。该性能问题是被 Red HatXFS 开发者 Dave Chinner 在代码中定位到的。使用一个叫 “延迟记录” 的挂载选项可以成数量级地提升元数据操作的性能。该选项几乎把日志整个存在内存中。Linux 内核主线版本 2.6.35 中作为一个试验性特性引入了这个补丁,在 2.6.37 中使它成为了一个稳定的特性,并计划在 2.6.39 中把它作为默认的日志记录方法。早期测试显示在有少量线程的环境中其性能接近 EXT4,在大量线程的环境下超过了 EXT4

3、Linux写时复制文件系统

3.1、ZFS 文件系统介绍

ZFS 文件系统的英文名称为 Zettabyte File System,也叫动态文件系统(Dynamic File System),是第一个 128 位文件系统。最初是由 Sun 公司为 Solaris 10 操作系统开发的文件系统。作为 OpenSolaris 开源计划的一部分,ZFS 于 2005 年 11 月发布,被 Sun 称为是终极文件系统,经历了 10 年的活跃开发。而最新的开发将全面开放,并重新命名为 OpenZFS

ZFS 是一款 128bit 文件系统,总容量是现有 64bit 文件系统的 1.84x10^19 倍,其支持的单个存储卷容量达到 16EiB2^64byte,即 16x1024x1024TB);一个 zpool 存储池可以拥有 2^64 个卷,总容量最大 256ZiB2^78 byte);整个系统又可以拥有 2^64 个存储 池。可以说在相当长的未来时间内,ZFS 几乎不太可能出现存储空间不足的问题。另外,它还拥有自优化,自动校验数据完整性,存储池/卷系统易管理等诸多优点。较 ext3 系统有较大运行速率,提高大约 30%-40%

ZFS 文件系统是一个革命性的全新的文件系统,它从根本上改变了文件系统的管理方式,这个文件系统的特色和其带来的好处至今没有其他文件系统可以与之媲美,ZFS 被设计成强大的、可升级并易于管理的。ZFS 用 “存储池” 的概念来管理物理存储空间。过去,文件系统都是构建在物理设备之上的。为了管理这些物理设备,并为数据提供冗余,“卷管理” 的概念提供了一个单设备的映像。但是这种设计增加了复杂性,同时根本没法使文件系统向更高层次发展,因为文件系统不能跨越数据的物理位置。

ZFS 完全抛弃了 “卷管理”,不再创建虚拟的卷,而是把所有设备集中到一个存储池中来进行管理,“存储池” 描述了存储的物理特征(设备的布局,数据的冗余等等),并扮演一个能够创建文件系统的专门存储空间。从此,文件系统不再局限于单独的物理设备,而且文件系统还允许物理设备把他们自带的那些文件系统共享到这个 “池” 中。你也不再需要预先规划好文件系统的大小,因为文件系统可以在 “池” 的空间内自动的增大。当增加新的存贮介质时,所有 “池” 中的所有文件系统能立即使用新增的空间,而不需要额外的操作。在很多情况下,存储池扮演了一个虚拟内存。

ZFS 使用一种写时拷贝事务模型技术。所有文件系统中的块指针都包括 256 位的能在读时被重新校验的关于目标块的校验和。含有活动数据的块从来不被覆盖;而是分配一个新块,并把修改过的数据写在新块上。所有与该块相关的元数据块都被重新读、分配和重写。为了减少该过程的开销,多次读写更新被归纳为一个事件组,并且在必要的时候使用日志来同步写操作。

利用写时拷贝使 ZFS 的快照和事物功能的实现变得更简单和自然,快照功能更灵活。缺点是,COW 使碎片化问题更加严重,对于顺序写生成的大文件,如果以后随机的对其中的一部分进行了更改,那么这个文件在硬盘上的物理地址就变得不再连续,未来的顺序读会变得性能比较差。

3.2、BTRFS 文件系统介绍

BTRFS(通常念成 Butter FS),由 Oracle 于 2007 年宣布并进行中的 COW(copy-on-write 式)文件系统。目标是取代 Linux ext3 文件系统,改善 ext3 的限制,特别是单一文件大小的限制,总文件系统大小限制以及加入文件校验和特性。加入 ext3/4 未支持的一些功能,例如可写的磁盘快照(snapshots),以及支持递归的快照(snapshots of snapshots),内建磁盘阵列(RAID)支持,支持子卷(Subvolumes)的概念,允许在线调整文件系统大小。

首先是扩展性 (scalability) 相关的特性,btrfs 最重要的设计目标是应对大型机器对文件系统的扩展性要求。 ExtentB-Tree 和动态 inode 创建等特性保证了 btrfs 在大型机器上仍有卓越的表现,其整体性能而不会随着系统容量的增加而降低。其次是数据一致性 (data integrity) 相关的特性。系统面临不可预料的硬件故障,Btrfs 采用 COW 事务技术来保证文件系统的一致性。 btrfs 还支持 checksum,避免了 silent corrupt 的出现。而传统文件系统则无法做到这一点。第三是和多设备管理相关的特性。 Btrfs 支持创建快照 (snapshot),和克隆 (clone) 。 btrfs 还能够方便的管理多个物理设备,使得传统的卷管理软件变得多余。最后是其他难以归类的特性。这些特性都是比较先进的技术,能够显著提高文件系统的时间/空间性能,包括延迟分配,小文件的存储优化,目录索引等。

3.3、BTRFS 文件系统特性

  • 可由底层多个物理卷进行支持。
  • 数据存储形式支持 RAID,同时在联机的情况下进行“添加硬盘”、“移除硬盘”、“修改文件系统的大小”。
  • 支持写时复制更新机制,即当我们修改文件时,btrfs先复制一份原文件,对新文件进行修改,结束时,原文件名指向新文件。
  • 支持卷的快照和快照的快照。
  • 透明压缩,即当文件系统存储文件时,文件系统会自动将文件进行压缩再存储,当提取时,文件系统自动进行解压缩,但是用户看不到此过程。
  • 扩展性 (scalability),btrfs 最重要的设计目标是应对大型机器对文件系统的扩展性要求。ExtentB-Treeinode 创建等特性保证了 btrfs 在大型机器上仍有卓越的表现,其整体性能而不会随着系统容量的增加而降低。
  • 数据一致性 (data integrity)。系统面临不可预料的硬件故障,Btrfs 采用 COW 事务技术来保证文件系统的一致性。 btrfs 还支持 checksum,避免了 silent corrupt 的出现。而传统文件系统则无法做到这一点。
  • 多设备管理相关的特性。 Btrfs 支持创建快照 (snapshot)、克隆 (clone) 。 btrfs 还能够方便的管理多个物理设备,使得传统的卷管理软件变得多余。

4、Linux创建分区

4.1、硬盘分区介绍

Linux 磁盘分区主要分为基本分区(primary partion)和扩充分区 (extension partion) 两种,基本分区和扩充分区的数目之和不能大于四个。且基本分区可以马上被使用但不能再分区。扩充分区必须再进行分区后才能使用,也就是说它必须还要进行二次分区。在 Linux 中,每一个硬件设备都映射到一个系统的文件,对于硬盘、光驱等 IDE 或 SCSI 设备也不例外。Linux把各种 IDE 设备分配了一个由 hd 前缀组成的文件,而对于各种 SCSI 设备,则分配了一个由 sd 前缀组成的文件。

4.1.1、分区的作用

  • 主分区主要是用来启动操作系统的,它主要放的是操作系统的启动或引导程序,/boot分区最好放在主分区上。
  • 扩展分区不能使用的,它只是做为逻辑分区的容器存在的;我们真正存放数据的是主分区和逻辑分区,大量数据都放在逻辑分区中
  • 如果你用的是 GPT 的分区方式,那么它没有限制主分区个数

Tips:从MBR转到GPT分区或者说从GPT转到MBR会导致数据全部丢失。

4.2、fdisk 命令参数介绍

下面列举了一些 fdisk 命令参数作用:

fdisk 命令参数名称功能与作用描述
-a设置活动分区标志
-b编辑 BSD Unix 系统用的磁盘标签
-c设置 DOS 兼容标志
-d删除分区
-l显示可用的分区类型
-m显示命令选项
-n添加一个新分区
-o创建 DOS 分区表
-p显示当前分区表
-q退出,不保存更改
-s为 Sun Unix 系统创建一个新磁盘标签
-t修改分区的系统 ID
-u改变使用的存储单位
-v验证分区表
-w将分区表写入磁盘
-x高级功能

4.3、查看机器所挂硬盘个数及分区情况

执行 fdisk -l 命令查看机器所挂硬盘个数及分区情况,执行结果如下图:

通过如图的信息,我们知道该机器中挂载三个硬盘(或移动硬盘), /dev/nvme0n1 表示第一块硬盘是 nvme0n1/dev/mapper/cl-root 表示根分区 cl-root,系统所有的东西都在这里面, /dev/mapper/cl-swap 表示交换分区 cl-swap,表示虚拟内存,当物理内存不足的时候,使用该硬盘上的空间。也可以查看单个硬盘情况,以 /dev/nvme0n1 为例,命令如下:

fdisk -l /dev/nvme0n1

4.4、硬盘分区

/dev/nvme0n1 为例,对其分区命令如下:

fdisk /dev/nvme0n1

从上图中可以看出,p 表示打印分区表,下面使用 n 命令可以添加分区,执行结果如下图:

5、Linux创建文件系统

5.1、创建文件系统命令介绍

工具命令名功能与作用描述
mkefs创建一个 ext 文件系统
mke2fs创建一个 ext2 文件系统
mkfs.ext3创建一个 ext3 文件系统
mkfs.ext4创建一个 ext4 文件系统
mkreiserfs创建一个 ReiserFS 文件系统
jfs_mkfs创建一个 JFS 文件系统
mkfs.xfs创建一个 XFS 文件系统
mkfs.zfs创建一个 ZFS 文件系统
mkfs.btrfs创建一个 Btrfs 文件系统

5.2、 检测是否安装文件系统工具

可以使用 type 命令去检测上述工具是否已经安装,命令如下:

type mkefs

type mke2fs

type mkfs.ext3

type mkfs.ext4

type mkreiserfs

type jfs_mkfs

type mkfs.xfs

type mkfs.zfs

type mkfs.btrfs

5.3、创建文件系统

使用 mkfs.ext4 命令创建 ext4 文件系统,命令如下:

mkfs.xfs /dev/nvme0n1p1

6、Linux文件系统检查

6.1、fsck 命令参数介绍

下面列举了一些 fsck 命令参数作用:

fsck 命令参数名称功能与作用描述
-a设置活动分区标志
-a自动修复文件系统,不询问任何问题
-A依照/etc/fstab配置文件的内容,检查文件内所列的全部文件系统
-N不执行指令,仅列出实际执行会进行的动作
-P当搭配"-A"参数使用时,则会同时检查所有的文件系统
-r采用互动模式,在执行修复时询问问题,让用户得以确认并决定处理方式
-R当搭配"-A"参数使用时,则会略过/目录的文件系统不予检查
-s依序执行检查作业,而非同时执行
-t指定要检查的文件系统类型
-T执行fsck指令时,不显示标题信息
-V显示指令执行过程

Tips:若想要使用 fsck 命令来检查并修复文件系统是存在风险的,特别是当硬盘错误非常严重的时候,因此,当一个受损文件系统中包含了非常有价值的数据时,务必首先进行备份.

6.2、fsck 修复分区

计算机系统很难避免意外情况导致的系统异常,通常在这种情况下容易造成文件系统崩溃,更严重的情况可能会造成硬盘损坏。fsck 命令可以用于文件系统的检查,并尝试修复出现的错误。

6.2.1、检查发现错误时由用户决定如何处理

若检查出错误时需要用户决定如何处理时,可以使用如下命令:

fsck -r /dev/sdb2

Tips-r 表示采用互动模式,若发现问题,需要询问用户选择并确认修复方式。

6.2.2、检查发现错误并修复

若检查出错误时需要修复,可以使用如下命令:

fsck -p /dev/sdb2

Tips-p 表示自动修复(不询问)。

6.2.3、检查发现错误仅显示不修复

若检查出错误时不修复,可以使用如下命令:

fsck -n /dev/sdb2
代码块1

Tips-n 表示不对文件系统做出改动。

7、Linux逻辑卷介绍

7.1、逻辑卷介绍

LVM 是逻辑盘卷管理(Logical Volume Manager)的简称,它是对磁盘分区进行管理的一种机制,建立在硬盘和分区之上的一个逻辑层,用来提高磁盘管理的灵活性。通过 LVM 可将若干个磁盘分区连接为一个整块的卷组(Volume Group),形成一个存储池。可以在卷组上随意创建逻辑卷(Logical Volumes),并进一步在逻辑卷上创建文件系统,与直接使用物理存储在管理上相比,提供了更好灵活性。LVM 本质上是一个虚拟设备驱动,处于物理设备和文件系统层之间,维护着逻辑盘区和物理盘区之间的映射。它将几块磁盘或者分区组合起来形成一个存储池或者卷组,LVM 从卷组中划分出不同大小的逻辑卷创建新的逻辑设备。

7.2、逻辑卷的工作原理

逻辑卷(LV)是将几个磁盘分区或者块设备组织起来形成一个大的扩展分区,该扩展分区不能直接用,需要将其划分成逻辑卷(LV)才能使用,LV 可以格式化成不同的文件系统,挂载后直接使用,LV 的扩展和缩减是不会影响原有数据的,但逻辑卷缩减的风险大于逻辑卷扩展的风险,逻辑卷可以支持快照功能。

7.3、逻辑卷的作用

通过 LVM 可以方便的在线调整存储卷的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配,例如按照使用用途进行定义:developmentsales,而不是使用物理磁盘名 sdasdb。当系统添加了新的磁盘,通过 LVM 可以直接扩展文件系统跨越该磁盘,而不必将文件移动到新的磁盘上,此外,LVM 快照功能以及 LVM 镜像功能,也被普遍应用于数据的备份与恢复系统中。

7.4、逻辑卷的优点

LVM 将存储虚拟化,使用逻辑卷,你不会受限于物理磁盘的大小,与硬件相关的存储设置被其隐藏,你可以不用停止应用或卸载文件系统来调整卷大小或数据迁移。LVM 与直接使用物理存储相比,有以下优点:

  • 灵活的容量,当使用逻辑卷时,文件系统可以扩展到多个磁盘上,你可以聚合多个磁盘或磁盘分区成单一的逻辑卷。
  • 可伸缩的存储池,你可以使用简单的命令来扩大或缩小逻辑卷大小,不用重新格式化或分区磁盘设备。
  • 在线的数据再分配,你可以在线移动数据,数据可以在磁盘在线的情况下重新分配。比如,你可以在线更换可热插拔的磁盘。
  • 方便的设备命名,逻辑卷可以按你觉得方便的方式来起任何名称。
  • 磁盘条块化,你可以生成一个逻辑盘,它的数据可以被条块化存储在2个或更多的磁盘上。这样可以明显提升数据吞吐量。
  • 镜像卷,LVM逻辑卷提供方便的方法来镜像你的数据。
  • 卷快照,使用逻辑卷,你可以获得设备快照用来一致性备份或者测试数据更新效果而不影响真实数据。

8、Linux 逻辑卷的简单使用

8.1、LVM 中的几个概念

  • PV(physical volume),物理卷在逻辑卷管理系统最底层,可为整个物理硬盘或实际物理硬盘上的分区。
  • VG(volume group),卷组建立在物理卷上,一卷组中至少要包括一物理卷,卷组建立后可动态的添加卷到卷组中,一个逻辑卷管理系统工程中可有多个卷组。
  • LV(logical volume),逻辑卷建立在卷组基础上,卷组中未分配空间可用于建立新的逻辑卷,逻辑卷建立后可以动态扩展和缩小空间。
  • PE(physical extent),物理区域是物理卷中可用于分配的最小存储单元,物理区域大小在建立卷组时指定,一旦确定不能更改,同一卷组所有物理卷的物理区域大小需一致,新的pv加入到vg后,pe的大小自动更改为vg中定义的pe大小。
  • LE(logical extent),逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小。
  • 卷组描述区域,卷组描述区域存在于每个物理卷中,用于描述物理卷本身、物理卷所属卷组、卷组中逻辑卷、逻辑卷中物理区域的分配等所有信息,它是在使用pvcreate建立物理卷时建立的。

8.2、给虚拟机添加硬盘

选择要添加硬盘的系统,点击硬盘然后添加

Tips:添加硬盘的系统需要处于关机状态。

来到添加界面之后点击 硬盘,然后点击 下一步

选择磁盘类型,这里选择推荐的类型即可

然后选择 创建新虚拟机磁盘

然后给新增的硬盘分配大小,分配好了之后点击下一步

分配好新硬盘空间之后,点击确定即可,然后开机,添加好之后如下图所示就会显示出新增的硬盘

8.3、创建PV

开机之后,首先使用 fdisk -l 命令查看硬盘使用情况

其中 /dev/nvme0n2 是新建的磁盘,接下来,我们可以将整个磁盘作为一个 PV,命令如下:

pvcreate /dev/nvme0n2

Tips:pvscan 可以查看目前存在哪些 PV

8.4、创建VG

通过 vgcreate vg1 /dev/nvme0n2 创建了一个 VG,其中物理卷 /dev/nvme0n2 属于 vg1,如下图所示:

可以通过 vgdisplay 显示更加详细的信息

8.5、创建 LV

LV是建立在一个 VG 上的,如下命令是创建 LV

lvcreate -L 10G -n lv1 vg1

Tips:在 vg1 卷轴组的基础上创建了一个大小 10G 的逻辑卷轴 lv1

8.6、扩展逻辑卷轴的大小

首先使用 lvscan 命令查看逻辑卷的路径

然后可以使用 lvextend -L +1G /dev/vg1/lv1lv1 逻辑卷增加 1G 的大小:

九、Linux软件管理

1、yum 软件包管理

1.1、yum 简介

yumRed Hat 软件包管理器,它能够查询有关可用软件包的信息,从存储库获取软件包,安装和卸载软件包,以及将整个系统更新到最新的可用版本。yum 在更新,安装或删除软件包时执行自动依赖性解析,因此能够自动确定,获取和安装所有可用的依赖软件包。yum 可以配置新的,额外的存储库或包源,还提供许多增强和扩展其功能的插件。

1.2、更新 yum 源

使用如下命令可以将 yum 源更新到最新:

yum update

1.3、安装软件

这里以安装 nginx 为例,使用如下命令:

yum -y install nginx

Tips:-y 表示不需要询问直接安装,nginx 表示软件名。

1.4、yum 清空缓存列表

使用如下命令可以清除缓存目录下的所有包:

yum clean packages

Tips:清空的是 /var/cache/yum 下的缓存。

1.5、显示所有已经安装和可以安装的程序包

使用如下命令显示所有已经安装和可以安装的程序包:

yum list

1.6、显示指定软件名信息列表

nginx 为例,使用如下命令显示 nginx 软件包信息列表:

yum list nginx

1.7、更新软件

以更新 nginx 为例,使用如下命令更新 nginx

yum update nginx

1.8、卸载已经安装的软件

以卸载 nginx 为例,使用如下命令卸载 nginx

yum remove nginx

2、rpm 软件包管理

2.1、rpm 简介

rpm 命令是 Red-Hat Package Manager 的缩写, 该命令用于管理 Linux 下软件包的软件。在 Linux 操作系统下,几乎所有的软件均可以通过 rpm 进行安装、卸载及管理等操作。

2.2、rpm 命令参数介绍

下面列举了一些 rpm 命令参数作用:

rpm 命令参数名称功能与作用描述
-a查询所有的软件包
-b设置包装套件的完成阶段,并指定套件档的文件名称
-c只列出组态配置文件,本参数需配合 -l 参数使用
-d只列出文本文件,本参数需配合 -l 参数使用
-e卸载软件包
-f查询文件或命令属于哪个软件包
-h安装软件包时列出标记
-i显示软件包的相关信息
–install安装软件包
-l显示软件包的文件列表
-p查询指定的 rpm 软件包
-q查询软件包
-R显示软件包的依赖关系
-s显示文件状态,本参数需配合 -l 参数使用
-U升级软件包
-v显示命令执行过程

2.3、下载 rpm 安装包

nginx 为例,使用如下命令下载 nginxrpm 包:

wget http://nginx.org/packages/centos/8/x86_64/RPMS/nginx-1.18.0-1.el8.ngx.x86_64.rpm

2.4、安装软件

使用如下命令安装 nginx

rpm -ivh nginx-1.18.0-1.el8.ngx.x86_64.rpm

Tips:-ivh 其中 i 表示显示软件包的相关信息,v 显示命令执行过程,h 安装软件包时列出标记。

2.5、列出 rpm 安装过的软件包

使用如下命令可以查看安装过的软件包:

rpm -qa

2.6、查询软件包中的文件安装的位置

nginx 为例,使用如下命令查看软件安装的位置:

rpm -ql nginx

2.7、卸载软件包

nginx 为例,卸载命令如下:

rpm -ev nginx 

3、源码安装软件

3.1、下载软件源码包

使用如下命令下载 nginx 源码包:

wget http://nginx.org/download/nginx-1.18.0.tar.gz

3.2、解压源码包

下载好了压缩包之后,需要使用 tar 命令对其解压:

tar -zxvf 
代码块1

3.3、安装 gcc

需要使用 gcc 编译器对源码进行编译,安装 gcc 命令如下:

yum -y install gcc

3.4、配置安装参数

进入到解压出来的 nginx 目录,然后使用如下命令配置参数:

cd nginx-1.18.0/

./configure --prefix=/usr/local/nginx

Tips:实际有很多参数,这里只是配置了一个安装目录的参数,其他配置为默认。

3.5、编译安装

执行如下命令将会对 nginx 源码包进行编译安装:

make && make install

3.6、查看安装软件目录信息

可以进入到 /usr/local 目录查看:

cd /usr/local

ll

Tip:本文来自慕课网

原文链接:01 Linux 简介丨慕课网教程 (imooc.com)

最后修改:2022 年 02 月 25 日 07 : 29 PM
赏杯咖啡喝 谢谢您~