目录

一.云计算基础

1.什么是服务器

2.典型服务模式

3.完整的操作系统

4.Linux 发行版本

5.RHEL,**红帽企业版 Linux**

6.Linux**简介**

二.虚拟机介绍与网络

虚拟软件安装

1.软硬件准备

2.虚拟机准备

3.虚拟机兼容性选择

网络

1.桥接与NAT区别

2.运用

三.分区与格式化

1.计算机容量单位

2.分区

3.分区命令

4.格式化与运用

四.linux安装

真机Linux 安装

Linux 安装步骤

VMware 安装 Centos7

1.连接光盘

2.开启虚拟机

3.安装操作系统

4.密码三原则

五.配置ip与远程工具

1.nmtui配置IP

2.远程工具

3.nmcli配置ip

六.linux使用注意事项

1.Linux 严格区分大小写

2.Linux 一切皆文件

3.Linux 不靠扩展名区分文件类型

4.Linux 中所有的存储设备都必须在挂载之后才能使用

5.Windows 下的程序不能直接在 Linux 中使用

七.linux管理建议

1.Linux 目录结构

2.远程服务器关机及重启时的注意事项

3.不要在服务器访问高峰运行高负载命令

4.远程配置防火墙时不要把自己踢出服务器

5.指定合理的密码规范并定期更新

6.合理分配权限

7.定期备份重要数据和日志

八.inode的概述

inode是什么?

目录文件

硬链接

软链接

inode的特殊作用

实际问题

九.linux基础命令

1.命令的基本格式

2.常用命令

3.基本权限命令

setfacl命令

4.帮助命令

5.搜寻命令

6.其他命令

7.压缩与解压缩命令

8.关机和重启命令

9.网络命令

配置ip

10.系统痕迹命令

11.挂载命令

mount 命令基本格式

光盘挂载

挂载 U 盘

挂载 NTFS 分区

十.vim命令

vi编辑器简介

vim编辑器简介

基本使用

vim 使用技巧

十一.软件包安装

1.软件包分类

2.源码包

1)源码包什么样

2)源码包特点

3.二进制包

1)二进制包分类

2)RPM包的基本用法

3)rpm包在线安装(yum安装)

4.yum命令

4.源码包的安装与管理。

1)软件包的选择

2)安装过程

3)删除

4)打补丁

5.脚本安装程序

1.Webmin 简介

2.下载Webmin的安装文件,

3.解压缩文件,命令是:

4.进入webmin的解压缩目录,然后运行setup.sh,命令为:

5.一路回车即可安装完成,

6.等看到安装完成的提示之后,

7.刚安装时是英文界面,登录webmin系统后,

十二.用户的管理

1.用户相关文件

1)用户信息文件

2) 密码文件

3)组信息文件

4)组密码文件

5)用户的家目录

6)用户邮箱目录

7)用户模板目录

2.用户管理命令

1 )添加用户

2)设定密码

3 用户信息修改命令

4 删除用户

5 切换用户身份与查看用户

6.组管理命令

1 )添加用户组命令

2 )删除用户组

3 )把用户添加进组或从组中删除

4)改变有效组

7.设置账户有效期。

1)chage命令的语法格式:

2)chage命令示例

十三.特殊权限管理

1.ACL 权限

1)查看acl是否开启

2)ACL 基本命令

3) 最大有效权限 mask

4)删除acl权限

2.sudo 授权

3.文件特殊权限

1)检测Setuid

SetUID

SetGID

Sticky BIT

设定特殊权限的mask值

4.文件系统属性 chattr 权限

十四.文件系统管理

1.硬盘结构

1)硬盘的逻辑结构

2)硬盘接口

2.linux文件系统

1)Linux 文件系统的特性

2)常见文件系统

3.常用的硬盘管理命令

1)df 查看分区的使用情况

2)du 统计文件大小

3)du与df的区别:

4)fsck 文件系统修复命令

5)dumpe2fs 显示磁盘状态

6)查看文件的详细信息

7)判断文件类型

4.分区与使用的概述

5.计算机的容量单位

6.MBR与GPT磁盘分区与分区工具

7.fdisk 命令手工分区

1)fdisk -l

2)使用fdisk手工分区

4.parted分区命令

1)parted命令格式与选项指令

2)parted交互模式分区管理

3)非交互式parted分区命令

4)parted配额MBR分区

5.手动利用硬盘swap分区

1)创建swap分区

2)格式化

3)使用 swap 分区

4)取消使用

5)自动挂载

6.利用文件方式swap分区

十五.高阶文件系统管理

1.磁盘配额

1)磁盘配额的概述

2)磁盘配额的条件

3)概念

4)磁盘配额规划

5)磁盘配额示例

2.逻辑卷

1)LVM介绍

2) 建立 LVM 的步骤

3)物理卷管理

4)卷组管理

5)逻辑卷管理

3.RAID磁盘整列

1)磁盘阵列概述

2)RAID几种常见的类型

3)RAID的种类概述

4)软RAID创建raid0与运用

5)软RAID创建RAID1与模拟错误

6)软RAID创建RAID5

7)软RAID创建RAID10

8)硬RAID卡配置

9)初始化虚拟磁盘

十六.系统启动与引导修复

1.系统运行级别

1)linux系统共有七个运行级别

2)系统默认运行级别

3)/etc/rc.d/rc.local

2.启动引导程序

1 )/boot/grub 目录

3系统修复模式

1)单用户模式

2)盘修复模式

3)破解root密码

十七.服务管理

1.服务的简介和分类

1)linux服务分类的思维架构图

2)RPM 包默认安装的服务的概述

3)RPM 包默认安装的服务管理

4)独立服务的启动脚本分析

2.源码包安装的服务管理

源码包安装的服务

让源码包服务被服务管理命令识别

3.linux中常见服务的作用

十八.系统管理

1.进程管理

1)进程介绍

2)进程相关命令

3)干掉进程

2.工作管理

1 )工作管理简介

2)把命令放入后台

3 )后台命令管理

4)后台命令脱离登录终端运行

3.系统资源查看相关命令

1)vmstat 命令监控系统资源

2)dmesg 显示开机时内核检测信息

3)free 命令查看内存使用状态

4)查看 CPU 信息

5)查看本机登陆用户信息

6)uptime命令

7)查看系统与内核相关信息

8)判断系统文件的位数来推断系统的位数

9)查看系统发行版本

十九.定时任务

1.单定时命令at

2.多次执行的定时任务crontab

二十.日志介绍管理与配置

1.日志简介

2.常见日志文件

3.日志服务 rsyslogd

4.日志轮替


一.云计算基础

1.什么是服务器

•能够为其他计算机提供服务的更高级的电脑

–机架式

–塔式

–机柜式

–刀片式

2.典型服务模式

•C/S,Client/Server架构

–由服务器提供资源或某种功能

–客户机使用资源或功能

3.完整的操作系统

Linux 内核 + 各种外围软件

4.Linux 发行版本

发行版的名称/版本由发行方(公司或个人)决定

Red Hat Enterprise Linux 6/7

Suse Linux Enterprise 12

Debian Linux 9.1

Ubuntu Linux 16.10/17.04

5.RHEL,**红帽企业版 Linux**

Red Hat Enterprise Linux

可以订阅获取软件升级、技术支持等服务

CentOS,社区企业操作系统

Community Enterprise Operating System

免费使用、免费软件源

官网:The CentOS Project

6.Linux**简介**

1)Linux**是一种操作系统!!**

操作系统:一堆软件的集合,让计算机硬件正常的工作

C/S结构:客户端(简单、方便)与服务端(稳定、高效、安全)

2)Unix/Linux**发展史**

• UNIX诞生,1970-1-1

– Ken Thompson、Dennis Ritchie

– 根据MULTICS项目的经验开发了一个多任务

操作系统 —— UNICS,后改为UNIX

– 1973年,用C语言重写了UNIX

– 1978年,有大约600台计算机运行UNIX

3)Linux之父,Linus Torwalds

– 1991年10月,发布0.02版(第一个公开版)内核

– 1994年03月,发布1.0版内核

– 标准读音:“哩呐科斯”

内核:调配计算机硬件资源

用户---->内核---->硬件

内核版本号:主版本.次版本.修订号

4)Linux**版本及应用**

• 发行版的名称/版本由发行方决定

– Red Hat Enterprise Linux 5/6/7/8

– Suse Linux Enterprise 12

– Debian Linux 7.8

– Ubuntu Linux 14.10/15.04

– ……

5)Red Hat**系列版本**

• 红帽 Linux 企业版

– 简称RHEL(Red Hat Enterprise Linux)

– Red Hat - We make open source technologies for the enterprise

• Fedora Core 社区版

– Fedora

• CentOS,社区企业操作系统

– Community Enterprise Operating System

– The CentOS Project

二.虚拟机介绍与网络

虚拟软件安装

1.软硬件准备

软件:推荐使用 VMware,我用的是 VMware 12

镜像:CentOS6 ,如果没有镜像可以在阿里云下载 阿里云开源镜像站资源目录

硬件:因为是在宿主机上运行虚拟化软件安装centos,所以对宿主机的配置有一定的要求。最起码i5,CPU双核、硬盘500G、内存4G以上。

2.虚拟机准备

1)打开VMware选择新建虚拟机

2)典型安装与自定义安装

典型安装:VMware会将主流的配置应用在虚拟机的操作系统上,对于新手来很友好。

自定义安装:自定义安装可以针对性的把一些资源加强,把不需要的资源移除。避免资源的浪费。

这里我选择自定义安装。

3.虚拟机兼容性选择

这里要注意兼容性,如果是VMware12创建的虚拟机复制到VM11、10或者更低的版本会出现一不兼容的现象。如果是用VMware10创建的虚拟机在VMware12中打开则不会出现兼容性问题。

4)选择稍后安装操作系统

5)操作系统的选择

这里选择之后安装的操作系统,正确的选择会让vm tools更好的兼容。这里选择linux下的CentOS

6)虚拟机位置与命名

虚拟机名称就是一个名字,在虚拟机多的时候方便自己找到。

VMware的默认位置是在C盘下,我这里改成F盘。

7)处理器与内存的分配

处理器分配要根据自己的实际需求来分配。在使用过程中CPU不够的话是可以再增加的。这次只做安装CentOS演示,所以处理器与核心都选1.

内存也是要根据实际的需求分配。我的宿主机内存是8G所以我给虚拟机分配2G内存。

8)这里选择桥接模式

9)其余两项按虚拟机默认选项即可

10)磁盘容量

磁盘容量暂时分配100G即可后期可以随时增加,不要勾选立即分配所有磁盘,否则虚拟机会将100G直接分配给CentOS,会导致宿主机所剩硬盘容量减少。 勾选将虚拟磁盘拆分成多个文件,这样可以使虚拟机方便用储存设备拷贝复制。

11)磁盘名称,默认即可

12)需要的硬件

点击自定义硬件

选择声卡、打印机等不需要的硬件然后移除。

13)点击完成,已经创建好虚拟机。

网络

1.桥接与NAT区别

网络连接类型的选择,网络连接类型一共有桥接、NAT、仅主机和不联网四种。

桥接:选择桥接模式的话虚拟机和宿主机在网络上就是平级的关系,相当于连接在同一交换机上。

NAT:NAT模式就是虚拟机要联网得先通过宿主机才能和外面进行通信。

仅主机:虚拟机与宿主机直接连起来

桥接与NAT模式访问互联网过程,如下图所示

2.运用

连接方式 连接网卡 是否能连接本机 是否能连接局域网 是否能连接外网
桥接 本地真实网卡 可以 可以 可以
NAT VMnet8 可以 不能 可以
仅主机 VMnet1 可以 不能 不能

真机网卡一搬有两块网卡:有限,无线

三.分区与格式化

1.计算机容量单位

一般用B,KB,MB,GB,TB,PB,EB,ZB,YB,BB来表示,它们之间的关系是:

1KB (Kilobyte 千字节)=1024B,

1MB (Megabyte 兆字节 简称“兆”)=1024KB,

1GB (Gigabyte 吉字节 又称“千兆”)=1024MB,

1TB (Terabyte 万亿字节 太字节)=1024GB,

1PB (Petabyte 千万亿字节 拍字节)=1024TB,

1EB (Exabyte 百亿亿字节 艾字节)=1024PB,

1ZB (Zettabyte 十万亿亿字节 泽字节)= 1024 EB,

1YB (Yottabyte 一亿亿亿字节 尧字节)= 1024 ZB,

1BB (Brontobyte 一千亿亿亿字节)= 1024 YB.

产商一般=1000

一块硬盘的“艺术”之旅(硬盘空间使用,经历的步骤)

•识别硬盘 => 分区规划 => 格式化 => 挂载使用

2.分区

MBR/msdos**分区模式**

分区类型:主分区、扩展分区(占用所有剩余空间)、逻辑分区

–最多只能有4个主分区;扩展分区可以没有,至多有一个;~4个主分区,或者 3个主分区+1个扩展分区(n个逻辑分区);最大支持容量为 2.2TB 的磁盘(总);

扩展分区不能格式化,空间不能直接存储数据,扩展分区里可以有无数个分区;

可以用于存储数据的分区:主分区与逻辑分区

分区模式GPT

全局唯一标识分区表 ;–突破固定大小64字节的分区表限制 ;–最多可支持128个主分区,最大支持18EB容量(总)

3.分区命令

划分MBR磁盘分区

命令:fdisk常用交互指令:

m 列出指令帮助

p 查看现有的分区表(存放分区信息的表格)

n 新建分区

d 删除分区

q 放弃更改并退出

w 保存更改并退出

parted**常用分区指令**

–help //查看指令帮助

–mktable gpt //建立指定模式分区表(不能重复执行,否则会把硬盘所有的数据清除一遍,包括分区表)

–mkpart 分区的名称 文件系统类型 start end //指定大小或百分比%作为起始、结束位置

unit GB #使用GB作为单位

–print //查看分区表

–rm 序号 //删除指定的分区

–quit //退出交互环境

mkfs.ext4 mkfs.xfs 格式化文件系统

如上自动挂载并测试配置文件是否正确然后挂载mount -a

查看

4.格式化与运用

格式化:赋予空间文件系统的过程

block:数据块,一个默认4kb(1,2k都行)

文件存储块可能不在一起

Inode:i节点,一个128个字节,

时间+权限+位置

文件系统:数据在空间中存放的规则

Windows常见的文件系统:NTFS FAT(兼容性强)

Linux常见的文件系统:ext4(RHEL6) xfs(RHEL7) FAT

格式命令 :mkfs.’格式文件系统’ 磁盘分区

最后挂载使用: 临时:mount 磁盘 目录

自动挂载:/etc/fstab

设备路径 挂载点 文件系统类型 参数 备份标记 检测顺序

mount -a

检测开机自动挂载配置文件,格式是否正确 并自动挂载

Lsblk: 查看本机识别的所有硬盘

Blkid :**查看磁盘uuid及格式化模式(type)**

df -h : 查看所有挂载点(+a则是查看所有)

Partprobe :刷新分区表

四.linux安装

安装之前要进入BIOS界面选择启动顺序,linux默认从EM盘里启动,可以改为光盘或U盘

真机Linux 安装

本章节我们将为大家介绍 Linux 的安装,安装步骤比较繁琐,现在其实云服务器挺普遍的,价格也便宜,如果自己不想搭建,也可以直接买一台学习用用,参考各大云服务器比较。

本章节以 centos6.4 为例。

centos 下载地址:

可以去官网下载最新版本:Download

以下针对各个版本的ISO镜像文件,进行一一说明:

  • CentOS-7.0-x86_64-DVD-1503-01.iso : 标准安装版,一般下载这个就可以了(推荐)

  • CentOS-7.0-x86_64-NetInstall-1503-01.iso : 网络安装镜像(从网络安装或者救援系统)

  • CentOS-7.0-x86_64-Everything-1503-01.iso: 对完整版安装盘的软件进行补充,集成所有软件。(包含centos7的一套完整的软件包,可以用来安装系统或者填充本地镜像)

  • CentOS-7.0-x86_64-GnomeLive-1503-01.iso: GNOME桌面版

  • CentOS-7.0-x86_64-KdeLive-1503-01.iso: KDE桌面版

  • CentOS-7.0-x86_64-livecd-1503-01.iso : 光盘上运行的系统,类拟于winpe

  • CentOS-7.0-x86_64-minimal-1503-01.iso : 精简版,自带的软件最少

注:建议安装64位Linux系统。

旧版本下载地址:Download - CentOS Wiki

接下来你需要将下载的Linux系统刻录成光盘或U盘。

注:你也可以在Window上安装VMware虚拟机来安装Linux系统。


Linux 安装步骤

1、首先,使用光驱或U盘或你下载的Linux ISO文件进行安装。

界面说明:

  • Install or upgrade an existing system 安装或升级现有的系统

  • install system with basic video driver 安装过程中采用基本的显卡驱动

  • Rescue installed system 进入系统修复模式

  • Boot from local drive 退出安装从硬盘启动

  • Memory test 内存检测

注:用联想E49安装时选择第一项安装时会出现屏幕显示异常的问题,后改用第二项安装时就没有出现问题

2、这时直接"skip"就可以了

注:这里可能会报显卡失败等问题,排错:换镜像,重装虚拟机,重装本机系统,最后换网卡等设备

3、出现引导界面,点击"next"

4、选中"English(English)"否则会有部分乱码问题(初学者尽量安装中文)

5、键盘布局选择"U.S.English"

6、选择"Basic Storage Devices"点击"Next"

7、询问是否删除所有数据,新电脑安装系统选择"Yes,discard any data"

8、Hostname填写格式"英文名.姓"(初学者建议不改)

9、网络设置安装图示顺序点击就可以了

10、时区可以在地图上点击,选择"shanghai"并取消System clock uses UTC前面的对勾

11、设置root的密码

12、硬盘分区,一定要按照图示点选

13、调整分区,必须要有/home这个分区,如果没有这个分区,安装部分软件会出现不能安装的问题

14、询问是否格式化分区

15、将更改写入到硬盘

16、引导程序安装位置

17、最重要的一步,也是本教程最关键的一步,也是其他教程没有提及的一步,按图示顺序点击

18、取消以下内容的所有选项

Applications

Base System

Servers

并对Desktops进行如下设置

即取消如下选项:

Desktop Debugging and Performance Tools

Desktop Platform

Remote Desktop Clients

Input Methods**中仅保留ibus-pinyin-1.3.8-1.el6.x86_64,其他的全部取消**

19、选中Languages,并选中右侧的Chinese Support然后点击红色区域

20、调整完成后如下图所示

21、至此,一个最精简的桌面环境就设置完成了,

22、安装完成,重启

23、重启之后,的License Information

24、Create User

Username:填写您的英文名(不带.姓)

Full Name:填写您的英文名.姓(首字母大写)

25、"Date and Time" 选中 "Synchronize data and time over the network"

Finsh之后系统将重启

26、第一次登录,登录前不要做任何更改,这个很重要!!!登录之后紧接着退出

第二次登录,选择语言,在红色区域选择下拉小三角,选other,选中"汉语(中国)"

27、登录之后,请一定按照如下顺序点击!

至此,CentOS安装完成,如有其他问题,请随时与我联系!!

VMware 安装 Centos7

1.连接光盘

注:内存必须大于628MB不然会简易安装

右击刚创建的虚拟机,选择设置

先选择CD/DVD,再选择使用ISO映像文件,最后选择浏览找到下载好的镜像文件。启动时连接一定要勾选上后确定。

2.开启虚拟机

3.安装操作系统

开启虚拟机后会出现以下界面:

  • Install CentOS 7 安装CentOS 7

  • Test this media & install CentOS 7 测试安装文件并安装CentOS 7

  • Troubleshooting 修复故障

选择第一项,安装直接CentOS 7,回车,进入下面的界面

选择安装过程中使用的语言,这里选择英文、键盘选择美式键盘。点击Continue

首先设置时间

时区选择上海,查看时间是否正确。然后点击Done

选择需要安装的软件

选择 Server with Gui,然后点击Done

选择安装位置,在这里可以进行磁盘划分。

选择i wil configure partitioning(我将会配置分区),然后点击done

如下图所示,点击加号,选择/boot,给boot分区分200M。最后点击Add

然后以同样的办法给其他三个区分配好空间后点击Done

然后会弹出摘要信息,点击AcceptChanges(接受更改)

设置主机名与网卡信息

首先要打开网卡,然后查看是否能获取到IP地址(我这里是桥接),再更改主机名后点击Done。

最后选择Begin Installation(开始安装)

设置root密码

设置root密码后点击Done

点击USER CREATION 创建管理员用户

输入用户名密码后点击Done

等待系统安装完毕重启系统即可

4.密码三原则

复杂性:

大于8位

大写,小写,数学,符号四种最少包含三种

不允许使用和个人相关的内容

不允许使用现有的英文单词

易记忆性:

时效性:180天

五.配置ip与远程工具

1.nmtui配置IP

~]# nmtui
#通过nmtui工具设置ip地址,注意激活onboot=yes
~]# service network restart
#重启网络服务

一般步骤:先编辑后激活,一步都不能少

使用nmtui可以为新网卡添加连接,然后进行ip配置,也可以对已经存在且使用的网卡进行ip的直接设置

2.远程工具

xshell远程工具

1)Xshell的下载与安装

首先我们到Xshell的官网下载最新版本的Xshell软件,填入你的用户名和邮箱,勾选Xshell Only,点击下载即可。

系统会把下载链接发到你的邮箱,找到链接下载软件即可。

2)在xshell里添加会话

安装好Xshell之后,双击Xshell图标,就可以打开Xshell工具。新安装的xshell会自动提示你需要添加一个会话,点击新建。

在弹出的窗口中依次填上如下数据:

名称:就是会话的名字,随便写,方便记住就行 主机:就是你的服务器的IP地址 端口号:就是你空间的端口号ssh port,一般VPS服务器的端口是22

其他都默认不填,填好后点击左侧的用户身份验证

在用户身份验证这一块填写你的服务器的用户名和密码,一般用户名是root,密码要自己记住。

填写好之后点击确定就可以了。

3)通过xshell连接服务器

打开Xshell之后,在左上角点击文件–>打开,在会话面板中,选中你要连接的会话,然后点击连接

第一次进入的时候,会出现以下提示,点击接受并保存

如果xshell面板中出现以下提示,则表示连接成功。

如果提示密码不对,就要检查密码,必要时手动输入密码。有的时候多出一个空格,密码都会错误,所以复制的时候要注意。

到这一步Xshell就已经安装成功了,接下来你就可以输入指令远程控制你的服务器了。输入指令要注意用鼠标右键复制粘贴,而不是用快捷键Ctrl+C, Ctrl+V去控制,切记切记!

3.nmcli配置ip

1)修改内核参数网卡命令规则

#grub内核引导程序 修改网卡命令规则eth0
~]# Vim /etc/default/grub
# 第六行修改:GRUB_CMDLINE_LINUX="…….. quiet net.ifnames=0 biosdevname=0”(生成网卡名规则)
​
#让网卡命名规则生效
~]# grub2-mkconfig -o /boot/grub2/grub.cfg :
​
#重启生效:
~]# reboot

2)添加网卡名

~]# nmcli connection add type ethernet ifname eth0 con-name  eth0
# nmcli connection 添加  类型  以太网设备 网卡设备名为eth0 mcli命令的命名为eth0
# nmcli connection delete [网卡名] :删除多于的网卡

3)添加IP地址、子网掩码、网关地址:

~]# nmcli connection modify eth0 ipv4.method  manual ipv4.addresses  192.168.4.7/24 ipv4.gateway  192.168.4.254 Ipv4.dns 8.8.8.8 connection.autoconnect  yes
​
#激活
~]# nmcli connection up eth0   # nmcli connection modify eth0 : nmcli connection 修改 网卡名
# ipv4.method manual(auto) :ipv4.方法 手工配置 (自动分配)
# ipv4.addresses 192.168.4.7/24 :ipv4.地址 192.168.4.7/24
# ipv4.gateway 192.168.4.254 :ipv4.网关 192.168.4.254
# Ipv4.dns 8.8.8.8 : ipv4.域名解析ip地址8.8.8.8
# connection.autoconnect yes :每次开机自动启用以上所有参数

4)验证

#查看网卡
~]# ifconfig
​
#查看路由表
~]# route -n
​
#查看网卡
~]# nmcli connection show
​
#查看ip地址
~]# ip address show 

六.linux使用注意事项

1.Linux 严格区分大小写

Linux 是严格区分大小写的,这一点和 Windows 不一样,所以操作时要注意区分大小写的不同,包括文件名和目录名、命令、命令选项、配置文件设置选项等。(linux命令没大写)

2.Linux 一切皆文件

Linux 中所有内容都是以文件的形式保存和管理的;

硬件设备也是文件,这和 Windows 完全不同,Windows 是通过设备管理器来管理硬件的。Linux 的设备文件保存在/dev/目录中,硬盘文件是/dev/sd[a-p],光盘文件是/dev/hdc 等。

3.Linux 不靠扩展名区分文件类型

Windows 是依赖扩展名区分文件类型的,比如,“.txt”是文本文件、“.exe”是执行文件、“.ini”是配置文件、“.mp4”是小电影等。但 Linux 不是靠扩展名区分文件类型的,而是靠权限位标识来确定文件类型的,而且文件类型的种类也不像 Windows 下那么多,常见的文件类型只有普通文件、目录、链接文件、块设备文件、字符设备文件等几种。Linux 的可执行文件不过就是普通文件被赋予了可执行权限而已。 但 Linux 中的一些特殊文件还是要求写“扩展名”的,并不是 Linux 一定要靠扩展名来识别文件类型,写这些扩展名是为了帮助管理员来区分不同的文件类型。这样的文件扩展名主要有以下几种。

  • 压缩包:Linux 下常见的压缩文件名有.gz、.bz2、.zip、.tar.gz、.tar.bz2、.tgz 等。为什么压缩包一定要写扩展名呢?其实很好理解,如果不写清楚扩展名,那么管理员不容易判断压缩包的格式,虽然有命令可以帮助判断,但是直观一点更加方便。另外,就算没写扩展名,在 Linux 中一样可以解压缩,不影响使用。

  • 二进制软件包:CentOS 中所使用的二进制安装包是 RPM 包,所有的 RPM 包都用“.rpm”扩展名结尾,目的同样是让管理员一目了然。

  • 程序文件:Shell 脚本一般用“.sh”扩展名结尾,其他还有用“.c”扩展名结尾的 C 语言文件等,“*.py”扩展名结尾的python文件。

  • 网页文件:网页文件一般使用“.html”“.php”等结尾,不过这是网页服务器的要求,而不是 Linux的要求。

4.Linux 中所有的存储设备都必须在挂载之后才能使用

Linux 中所有的存储设备都有自己的设备文件名,这些设备文件必须在挂载之后才能使用,包括硬盘、U 盘和光盘。挂载其实就是给这些存储设备分配盘符,只不过 Windows 中的盘符用英文字母表示,而 Linux中的盘符则是一个已经建立的空目录。我们把这些空目录叫作挂载点(可以理解为Windows的盘符),把设备文件(如/dev/sdb)和挂载点(已经建立的空目录)连接的过程叫作挂载。

5.Windows 下的程序不能直接在 Linux 中使用

Linux 和 Windows 是不同的操作系统,可以安装和使用的软件也是不同的,所以能够在 Windows中安装的软件是不能在 Linux 中安装的。有好处吗?当然有,那就是能够感染 Windows 的病毒和木马都对 Linux 无效。有坏处吗?也有,那就是所有的软件要想在 Linux 中安装,必须单独开发针对 Linux的版本,或者依赖模拟器软件运行。 很多软件也会同时推出针对 Windows 和 Linux 的版本,如大家熟悉的即时通信软件 QQ、音乐软件 网易云音乐。

七.linux管理建议

1.Linux 目录结构

目 录 名 目录的作用
/bin/ 存放系统命令的目录,普通用户和超级用户都可以执行。是/usr/bin/目录的软链接
/sbin/ 存放系统命令的目录,只有超级用户才可以执行。是/usr/sbin/目录的软链接
/usr/bin/ 存放系统命令的目录,普通用户和超级用户都可以执行
/usr/sbin/ 存放系统命令的目录,只有超级用户才可以执行
/boot/ 系统启动目录,保存与系统启动相关的文件,如内核文件和启动引导程序
/dev/ 设备文件保存位置
/etc/ 配置文件保存位置。系统内所有采用默认安装方式(rpm 安装)的服务配置文件全部保存在此目录中,如用户信息、服务的启动脚本、常用服务的配置文件等
/home/ 普通用户的家目录。在创建用户时,每个用户要有一个默认登录和保存自己数据的位置,就是用户的家目录,所有普通用户的宿主目录是在/home/下建立一个和用户名相同的目录。如用户love2的家目录就是/home/love2/
/lib/ 系统调用的函数库保存位置。是/usr/lib/的软链接
/lib64/ 64 位函数库保存位置。是/usr/lib64/的软链接
/lost+found/ 当系统意外崩溃或机器意外关机,而产生一些文件碎片放在这里。当系统启动的过程中 fsck 工具会检查这里,并修复已经损坏的文件系统。这个目录只在每个分区中出现,例如/lost+found 就是根分区的备份恢复目录,/boot/lost+found 就是/boot 分区的备份恢复目录
/media/ 挂载目录。系统建议是用来挂载媒体设备的,如软盘和光盘
/misc/ 挂载目录。系统建议用来挂载 NFS 服务的共享目录。我们在刚刚已经解释了挂载,我们应该知道只要是一个已经建立的空目录就可以作为挂载点。那么系统虽然准备了三个默认挂载目录/media、/mnt、/misc,但是到底在哪个目录中挂载什么设备都可以由管理员自己决定
/mnt/ 挂载目录。早期 Linux 中只有这一个挂载目录,并没有细分。现在系统建议这个目录用来挂载额外的设备,如 U 盘、移动硬盘和其他操作系统的分区
/opt/ 第三方安装的软件保存位置。这个目录是放置和安装其他软件的位置,手工安装的源码包软件都可以安装到这个目录中。不过习惯还是把软件放到/usr/local/目录中,也就是说,/usr/local/目录也可以用来安装软件
/proc/ 虚拟文件系统。该目录中的数据并不保存在硬盘上,而是保存到内存中。主要保存系统的内核、进程、外部设备状态和网络状态等。如/proc/cpuinfo 是保存 CPU信息的,/proc/devices 是保存设备驱动的列表的,/proc/filesystems 是保存文件系统列表信息的。。。
/sys/ 虚拟文件系统。和/proc/目录相似,该目录中的数据都保存在内存中,主要保存与内核相关的信息
/root/ root 的宿主目录。普通用户宿主目录在/home/下,root 宿主目录直接在“/”下
/run/ 系统运行时产生的数据,如 ssid,pid 等相关数据。/var/run/是此目录的软链接
/srv/ 服务数据目录。一些系统服务启动之后,可以在这个目录中保存所需要的数据
/tmp/ 临时目录。系统存放临时文件的目录,在该目录下,所有用户都可以访问和写入。我们建议此目录中不能保存重要数据,最好每次开机都把该目录清空
/usr/ 系统软件资源目录。注意 usr 不是 user 的缩写,而是“UNIX Software Resource”的缩写,所以不是存放用户数据的目录,而是存放系统软件资源的目录。系统中安装的软件大多数保存在这里
/usr/lib/ 应用程序调用的函数库保存位置
/usr/local/ 手工安装的软件保存位置。我们一般建议源码包软件安装在这个位置
/usr/share/ 应用程序的资源文件保存位置,如帮助文档、说明文档和字体目录
/usr/src/ 源码包保存位置
/usr/src/kernels/ 内核源码保存位置
/var/ 动态数据保存位置。主要保存缓存、日志以及软件运行所产生的文件
/var/lib/ 程序运行中需要调用或改变的数据保存位置。如 MySQL 的数据库保存在/var/lib/mysql/目录中
/var/log/ 系统日志保存位置
/var/run/ 一些服务和程序运行后,它们的 PID(进程 ID)保存位置。是/run/目录的软链接
/var/spool/ 放置队列数据的目录。就是排队等待其他程序使用的数据,比如邮件队列和打印队列
/var/spool/mail/ 新收到的邮件队列保存位置。系统新收到的邮件会保存在此目录中
/var/spool/cron/ 系统的定时任务队列保存位置。系统的计划任务会保存在这里

2.远程服务器关机及重启时的注意事项

为什么远程服务器不能关机呢?很简单,远程服务器没有放置在本地,关机后,谁可以帮你按开机电源键启动服务器?虽然计算机技术日新月异,但是像插入电源和开机这样的工作还是需要手工进行的。如果服务器在远程,一旦关机,就只能求助托管机房的管理人员帮你开机了。

远程服务器重启时需要注意两点。

2.1 远程服务器在重启前,要中止正在执行的服务

计算机的硬盘最怕在高速存储时断电或重启,非常容易造成硬盘损坏。所以,在重启前先中止你的服务,甚至可以考虑暂时断开对外提供服务的网络。可能你会觉得服务器有这么娇贵吗?我的笔记本电脑经常强行关机,也没有发现硬盘损坏啊?这是因为你的个人计算机没有很多人访问,强制断电时硬盘并没有进行数据交换。小心驶得万年船!

2.2 重启命令的选用

Linux 可以识别的重启命令有很多条,但是建议大家使用“shutdown -r now”命令重启。这条命令在重启时会正常保存和中止服务器中正在运行的程序,是安全重启命令。"reboot" 和"init 6"都不安全。不推荐使用。而且最好在重启前执行几次“sync”命令,这条命令是数据同步命令,可以让暂时保存在内存中的数据同步到硬盘上。

3.不要在服务器访问高峰运行高负载命令

在服务器访问高峰,如果使用一些对服务器压力较大的命令,则有可能会造成服务器响应缓慢甚至死机。 哪些命令是高负载命令呢?其实,如果大家使用过 Windows 操作系统,则也会留意到一些操作会给计算机带来较大的运算压力,道理都是一样的,如复制大量的数据、压缩或者解压缩大文件、大范围的硬盘搜索等。 什么时间算作访问高峰期呢?一般认为 17:00—24:00 算作访问高峰期。当然,每台服务器具体提供的服务不同,访问高峰期有时也会有所出入。比如,服务器主要是供美国人民访问的,那就要考虑时差的问题;或者服务器提供的服务很特殊,访问高峰期可能也不同。 一般我们建议在凌晨 4:00—5:00 执行这些命令。

4.远程配置防火墙时不要把自己踢出服务器

简单来讲,防火墙就是根据数据包自身的参数来判断是否允许数据包通过的网络设备。我们的服务器要想在公网中安全地使用,就需要使用防火墙过滤有害的数据包。但是在配置防火墙时,如果管理员对防火墙不是很熟悉,则有可能把自己的正常访问数据包和有害数据包全部过滤掉,导致自己也无法正常登录服务器,如防火墙关闭了远程连接的 SSH 服务的端口。 防火墙配置完全是靠手工命令完成的,配置规则和配置命令相对也比较复杂,万一设置的时候心不在焉,悲剧就发生了。 如何避免这种尴尬的情况发生呢?最好的方法当然是在服务器本地配置防火墙,这样就算不小心把自己的远程登录给过滤了,还可以通过本机登录来进行恢复。如果服务器已经在远程登录了,要配置防火墙,那么最好在本地测试完善后再进行上传,这样会把发生故障的概率降到最低。虽然在本地测试好了,但是传到远程服务器上时仍有可能发生问题。所以如果需要远程配置防火墙,那么先写一个系统定时任务,让它每 5 分钟清空一下防火墙规则,就算写错了也还有反悔。

5.指定合理的密码规范并定期更新

  • 复杂性 8位字符以上 ,大写字母、小写字母、数字、符号四种最少含有三种 ,不能是现有英文单词 ,不能和用户个人信息相关

  • 易记忆性

  • 时效性

6.合理分配权限

服务器管理有一个最简单的原则:给予用户最小的权限。

7.定期备份重要数据和日志

八.inode的概述

inode是什么?

理解inode,要从文件储存说A起。

文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。

inode的内容

inode包含文件的元信息,具体来说有以下内容:

## 文件的字节数# 文件拥有者的User ID# 文件的Group ID# 文件的读、写、执行权限# 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。# 链接数,即有多少文件名指向这个inode# 文件数据block的位置

可以用stat命令,查看某个文件的inode信息:

stat example.txt

总之,除了文件名以外的所有文件信息,都存在inode之中。至于为什么没有文件名,下文会有详细解释。

inode的大小

inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。

每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。

# 查看每个硬盘分区的inode总数和已经使用的数量,可以使用df命令。
~]# df -i
​
# 查看每个inode节点的大小,可以用如下命令:
~]# sudo dumpe2fs -h /dev/hda | grep "Inode size"

由于每个文件都必须有一个inode,因此有可能发生inode已经用光,但是硬盘还未存满的情况。这时,就无法在硬盘上创建新文件。

inode号码

每个inode都有一个号码,操作系统用inode号码来识别不同的文件。

这里值得重复一遍,Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。

# 使用ls -i命令,可以看到文件名对应的inode号码:
~]# ls -i example.txt

目录文件

Unix/Linux系统中,目录(directory)也是一种文件。打开目录,实际上就是打开目录文件。

目录文件的结构非常简单,就是一系列目录项(dirent)的列表。每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。

# ls命令只列出目录文件中的所有文件名:
~]# ls /etc# ls -i命令列出整个目录文件,即文件名和inode号码:
~]# ls -i /etc# 如果要查看文件的详细信息,就必须根据inode号码,访问inode节点,读取信息。ls -l命令列出文件的详细信息。
~]# ls -l /etc

硬链接

一般情况下,文件名和inode号码是"一一对应"关系,每个inode号码对应一个文件名。但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为"硬链接"(hard link)。

ln命令可以创建硬链接:

ln 源文件 目标文件

运行上面这条命令以后,源文件与目标文件的inode号码相同,都指向同一个inode。inode信息中有一项叫做"链接数",记录指向该inode的文件名总数,这时就会增加1。反过来,删除一个文件名,就会使得inode节点中的"链接数"减1。当这个值减到0,表明没有文件名指向这个inode,系统就会回收这个inode号码,以及其所对应block区域。

这里顺便说一下目录文件的"链接数"。创建目录时,默认会生成两个目录项:"."和".."。前者的inode号码就是当前目录的inode号码,等同于当前目录的"硬链接";后者的inode号码就是当前目录的父目录的inode号码,等同于父目录的"硬链接"。所以,任何一个目录的"硬链接"总数,总是等于2加上它的子目录总数(含隐藏目录),这里的2是父目录对其的“硬链接”和当前目录下的".硬链接“。

软链接

除了硬链接以外,还有一种特殊情况。文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。因此,无论打开哪一个文件,最终读取的都是文件B。这时,文件A就称为文件B的"软链接"(soft link)或者"符号链接(symbolic link)。

这意味着,文件A依赖于文件B而存在,如果删除了文件B,打开文件A就会报错:"No such file or directory"。这是软链接与硬链接最大的不同:文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode"链接数"不会因此发生变化。

~]# ln -s命令可以创建软链接。
~]# ln -s 源文文件或目录 目标文件或目录

inode的特殊作用

由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象。

  1. 有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。

  2. 移动文件或重命名文件,只是改变文件名,不影响inode号码。

  3. 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。

第3点使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过inode号码,识别运行中的文件,不通过文件名。更新的时候,新版文件以同样的文件名,生成一个新的inode,不会影响到运行中的文件。等到下一次运行这个软件的时候,文件名就自动指向新版文件,旧版文件的inode则被回收。

实际问题

在一台配置较低的Linux服务器(内存、硬盘比较小)的/data分区内创建文件时,系统提示磁盘空间不足,用df -h命令查看了一下磁盘使用情况,发现/data分区只使用了66%,还有12G的剩余空间,按理说不会出现这种问题。 后来用df -i查看了一下/data分区的索引节点(inode),发现已经用满(IUsed=100%),导致系统无法创建新目录和文件。

查找原因:

  /data/cache目录中存在数量非常多的小字节缓存文件,占用的Block不多,但是占用了大量的inode。

解决方案:   1、删除/data/cache目录中的部分文件,释放出/data分区的一部分inode。   2、用软连接将空闲分区/opt中的newcache目录连接到/data/cache,使用/opt分区的inode来缓解/data分区inode不足的问题:   ln -s /opt/newcache /data/cache

九.linux基础命令

1.命令的基本格式

1)命令提示符

[root@localhost ~]#
[]:这是提示符的分隔符号,没有特殊含义。
root:显示的是当前的登录用户。
@:分隔符号,没有特殊含义。love2:当前系统的主机名(默认主机名是 localhost.localdomain,我已经修改了)。
~:代表用户当前所在的目录,此例中用户当前所在的目录是家目录。
#:命令提示符。超级用户是#; 普通用户是$

2)命令的基本格式

[root@localhost  ~]#
命令 [选项] [参数]
ls 是最常见的目录操作命令,主要作用是显示目录下的内容。
命令名称:ls。
英文原意:list。
所在路径:/bin/ls。
执行权限:所有用户。
功能描述:显示目录下的内容

2.常用命令

1)目录操作命令

绝对路径与相对路径的区别

绝对路径: 以根目录开始的路径

相对路径: 以当前路径为参照的路径

# 绝对路径
~]# cd /mnt/
​
# 相对路径
mnt]# ls
a  b  c
mnt]# cd a/

ls 命令

~]#ls [选项] [文件名或目录名]
选项:
-a:    显示所有文件,包括隐藏文件;隐藏文件是告诉用户该文件为重要文件,一般木马与病毒文件也是隐藏文件
-d:    显示目录信息,而不是目录下的文件
-h:    人性化显示,按照我们习惯的单位显示文件大小
-i:    显示文件的i节点号
-l:    长格式显示
-R:递归查看
--color=when: 支持颜色输出,when的值默认是always(总显示颜色),也可以是never(从不显示颜色)和auto(自动)
~]# ls -l
total 4
drwxr-xr-x 3 root root  4096 Sep  3  2020 ansible
lrwxrwxrwx 1 root root    13 Apr 20  2020 rc.local -> rc.d/rc.local
#第一列:权限。具体权限以后再说明。
#第二列:引用计数。文件的引用计数代表该文件的硬链接个数,而目录的引用计数代表该目录 有多少个一级子目录。
#第三列:所有者,也就是这个文件属于哪个用户。默认所有者是文件的建立用户。
#第四列:所属组。默认所属组是文件建立用户的有效组,一般情况下就是建立用户的所在组。
#第五列:大小。默认单位是字节。
#第六列:文件修改时间。文件状态修改时间或文件数据修改时间都会更改这个时间,注意这个 时间不是文件的创建时间。
#第七列:文件名。

cd 命令

cd 是切换所在目录的命令 命令名称:cd 英文原意:change directory 所在路径:Shell 内置命令 执行权限:所有用户。 功能描述:切换所在目录

注:cd 直接回root家目录

特殊符号 作用
.. 表示上一层目录
. 表示当前目录
~ 表示家目录
- 表示上一次所在目录

pwd 命令

pwd 命令是查询所在目录的命令 命令名称:pwd 英文原意:print name of current/working directory 所在路径:/bin/pwd 执行权限:所有用户。 功能描述:查询所在的工作目录

mkdir 命令

mkdir 是创建目录的命令, 命令名称:mkdir。 英文原意:make directories。 所在路径:/bin/mkdir。 执行权限:所有用户。 功能描述:创建空目录。

选项:-p :递归建立所需目录,连同父目录一并创建

注:同一级目录下绝对不能同时存在同名目录

[root@love2 ~]# mkdir [选项] 目录名 选项  

rmdir 命令

删除目录的命令 rmdir 命令名称:rmdir 英文原意:remove empty directories 所在路径:/bin/rmdir 执行权限:所有用户 功能描述:删除空目录

-p: 递归删除目录

注:rmdir 命令的作用十分有限,因为只能删除空目录,所以一旦目录中有内容,就会报错。

~]# rmdir [选项] 目录名 选项

2)文件操作命令

touch 命令

创建空文件或修改文件时间;也就是已经存在的文件会修改时间 命令名称:touch 英文原意:change file timestamps 所在路径:/bin/touch 执行权限:所有用户 功能描述:创建文件或修改文件的时间戳

注:同级目录下同名文件不可同时存在,但命令可以重复打;也可以同时创建多个文件

~]# touch [参数] [参数] [参数]

stat 命令

stat 是查看文件详细信息的命令,而且可以看到文件的这三个时间 命令名称:stat。 英文原意:display file or file system status 所在路径:/usr/bin/stat 执行权限:所有用户。 功能描述:显示文件或文件系统的详细信息

~]# stat nginx.tar.gz
文件: ‘nginx.tar.gz’
大小: 3229419     块: 6312      io快: 4096   常规文件
设备: fd11h/64785d    Inode: 275281678   Links: 1
权限: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
环境:.....
Access: 2021-11-26 16:50:02.815109997 +0800    #最近访问时间
Modify: 2021-11-26 10:33:48.785156265 +0800    #最近更改时间,指的是内部数据修改
Change: 2021-11-26 16:03:51.250354201 +0800    #状态修改时间,指其权限等等
Birth: -   #创建时间;一般linux是不记录创建时间的

cat 命令

cat 命令用来查看文件内容。 命令名称:cat 英文原意:concatenate files and print on the standard output 所在路径:/bin/cat 执行权限:所有用户。

注:cat不适合看大文件

~]# cat [选项] 文件名 选项:
-n: 显示行号
-A: 相当于-vET选项的整合,用于列出所有隐藏符号
-E: 列出每行结尾的回车符$
-T: 把Tab键用^I显示出来
-v: 列出特殊字符

more 命令

more 是分屏显示文件的命令 命令名称:more 英文原意:file perusal filter for crt viewin 所在路径:/bin/more 执行权限:所有用户 功能描述:分屏显示文件内容。 more 命令比较简单,一般不用什么选项,命令会打开一个交互界面,可以识别一些交互命令。常用的交互命令如下: 空格键:向下翻页 b:向上翻页 回车键:向下滚动一行 /字符串:搜索指定的字符串 q:退出。

less 命令

less 命令和 more 命令类似,只是 more 是分屏显示命令,而 less 是分行显示命令。 命令名称:less 英文原意:opposite of more 所在路径:/usr/bin/less 执行权限:所有用户 功能描述:分行显示文件内容

head 命令

head 是用来显示文件开头的命令

命令名称:head 英文原意:output the first part of files 所在路径:/usr/bin/head 执行权限:所有用户 功能描述:显示文件开头的内容

注:不打行数默认10行。

~]# head [选项] 文件名
-n 行数: 从文件头开始,显示指定行数
-v:   显示文件名 # 查看开头四行
~]# head -n 5 ansible.cfg
# config file for ansible -- http://ansible.com/
# ==============================================# This config file provides examples for running
# the OpenShift playbooks with the provided# 选项不打也行
~]# head -5 ansible.cfg
# config file for ansible -- http://ansible.com/
# ==============================================# This config file provides examples for running
# the OpenShift playbooks with the provided

tail 命令

显示文件结尾的命令。 命令名称:tail。 英文原意:output the last part of files 所在路径:/usr/bin/tail。 执行权限:所有用户 功能描述:显示文件结尾的内容。

注:不打行数,默认10行

~]# tail [选项] 文件名
选项:
-n 行数: 从文件结尾开始,显示指定行数
-f:  监听文件新增内容。# 查看结尾四行
~]# tail -n 4 ansible.cfg
fact_caching_connection = $HOME/ansible/facts
fact_caching_timeout = 600
callback_whitelist = profile_tasks
StrictHostKeyChecking = no# 选项不打也行
~]# tail -4 ansible.cfg
fact_caching_connection = $HOME/ansible/facts
fact_caching_timeout = 600
callback_whitelist = profile_tasks
StrictHostKeyChecking = no

ln 命令

命令名称:ln 英文原意:make links between file. 所在路径:/bin/ln 执行权限:所有用户 功能描述:在文件之间建立链接

1 )基本使用

~]# ln [选项] 源文件 目标文件
选项:
-s: 建立软链接文件。如果不加“-s”选项,则建立硬链接文件
-f: 强制。如果目标文件已经存在,则删除目标文件后再建立链接文件 

2) 软连接

~]# ln -s edu.txt /tmp/
软链接特征:
#软链接和源文件拥有不同的 Inode 和 Block
#两个文件修改任意一个,另一个都改变
#删除软链接,源文件不受影响;删除源文件,软链接不能使用
#软链接没有实际数据,只保存源文件的 Inode,不论源文件多大,软链接大小不变
#软链接的权限是最大权限 lrwxrwxrwx.,但是由于没有实际数据,最终访问时需要参考源文件权限
#软链接可以链接目录
#软链接可以跨分区
#软链接特征明显,建议使用软连接
#软连接一定要写绝对路径

3)硬链接

~]# ln edu.txt /tmp/ (不写名字,和原文件名一致)
#也就是 /root/edu.txt 和 /tmp/edu.txt 是硬链接文件
#硬链接特征:
#源文件和硬链接文件拥有相同的 Inode 和 Block
#修改任意一个文件,另一个都改变
#删除任意一个文件,另一个都能使用
#硬链接不能链接目录
#硬链接不能跨分区
#硬链接标记不清,很难确认硬链接文件位置,不建议使用 

3)目录和文件都能操作的命令

rm 命令

rm 是强大的删除命令,不仅可以删除文件,也可以删除目录 命令名称:rm 英文原意:remove files or directories 所在路径:/bin/rm 执行权限:所有用户 功能描述:删除文件或目录

~]# rm [选项] 文件或目录
选项:  -f:  强制删除(force)
-i:  交互删除,在删除之前会询问用户
-r:  递归删除,可以删除目录(recursive)

cp 命令

cp 是用于复制的命令 命令名称:cp。 英文原意:copy files and directories 所在路径:/bin/cp。 执行权限:所有用户 功能描述:复制文件和目录。

~]# cp [选项] 源文件 目标文件
选项:
-a:  相当于-dpr选项的集合
-d:  如果源文件为软链接(对硬链接无效),则复制出的目标文件也为软链接
-i:  询问,如果目标文件已经存在,则会询问是否覆盖
-p:  复制后目标文件保留源文件的属性(包括所有者、所属组、权限和时间)
-r:  递归复制,用于复制目录 

mv 命令

mv 是用来剪切的命令 命令名称:mv 英文原意:move (rename) files 所在路径:/bin/mv 执行权限:所有用户。 功能描述:移动文件或改名。

~]# mv [选项] 源文件 目标文件
选项:
-f:  强制覆盖,如果目标文件已经存在,则不询问,直接强制覆盖
-i:  交互移动,如果目标文件已经存在,则询问用户是否覆盖(默认选项)
-v:  显示详细信息 

3.基本权限命令

1)权限的概述

在linux中文件一般靠inode号

使用ls命令查看时,发现长格式显示的第一列就是文件的权限

~]# ls -ld roles
drwxr-xr-x 8 root root 138 Nov 24 16:12 roles

权限位一共有 10 位,这 10 位权限位的含义如下图所示。

第 1 位代表文件类型。

Linux 不像 Windows 使用扩展名表示文件类型,而是使用权限位的第 1 位表示文件类型。虽然 Linux 文件的种类不像 Windows 中那么多,但是分类也不少,详细情况 可以使用“info ls”命令查看。

“-”:普通文件。
“d”:目录文件。Linux 中一切皆文件,所以目录也是文件的一种。
“l”:软链接文件。
“b”:块设备文件。这是一种特殊设备文件,存储设备都是这种文件,如分区文件/dev/sda1 就是这种文件。
“c”:字符设备文件。这也是特殊设备文件,输入设备一般都是这种文件,如鼠标、键盘 等。# 该文件开头的文件不能删除,该文件为唯一文件
“p”:管道符文件。这是一种非常少见的特殊设备文件。
“s”:套接字文件。这也是一种特殊设备文件,一些服务支持 Socket 访问,就会产生这样的文件。

注:info代表以书的形式查看

如果有字母,则代表拥有对应的权限;如果是“-”,则代表没有对应的权限。

第 2~4 位代表文件所有者的权限 r:代表 read,是读取权限。 w:代表 write,是写权限。 x:代表 execute,是执行权限

第 5~7 位代表文件所属组的权限,同样拥有“rx”权限。

第 8~10 位代表其他人的权限,同样拥有“rx”权限

2)基本权限命令。

chmod,修改权限的命令 。

命令名称:chmod。 英文原意:change file mode bits。 所在路径:/bin/chmod。 执行权限:所有用户。 功能描述:修改文件的权限模式

命令格式:

chmod 选项 命令模式 文件...
-R:  递归设置权限,也就是给子目录中的所有文件设定权限

权限模式

chmod 命令的权限模式的格式是“ugoa[perms]]”,也就是“用户身份[权限]]” 的格式。

用户身份

  • u:代表所有者(user)。

  • g:代表所属组(group)。

  • o:代表其他人(other)。

  • a:代表全部身份(all)。

赋予方式

  • +:加入权限。

  • -:减去权限。

  • =:设置权限。

权限

  • r:读取权限(read)。

  • w:写权限(write)。

  • x:执行权限(execute)。 例如

chmod  o-w a.txt
#把a.txt针对其他人写权限移除。

数字权限

数字权限的赋予方式是最简单的,但是不如之前的字母权限好记、直观。 4:代表“r”权限。 2:代表“w”权限。 1:代表“x”权限。 例如

chmod 644 a.txt
# 为a.txt 设置 rw-r--r-- 权限 

常用权限

数字权限的赋予方式更加简单,但是需要用户对这几个数字更加熟悉。其实常用权限也并不多,只有如下几个。

  • 644:这是文件的基本权限,代表所有者拥有读、写权限,而所属组和其他人拥有只读权限。

  • 755:这是文件的执行权限和目录的基本权限,代表所有者拥有读、写和执行权限,而所属组和其他人拥有读和执行权限。

  • 777:这是最大权限。在实际的生产服务器中,要尽力避免给文件或目录赋予这样的权限,这会造成一定的安全隐患。

3)基本权限的作用

权限含义的解释 首先,读、写、执行权限对文件和目录的作用是不同的

权限对文件的作用。

  • 读(r):对文件有读(r)权限,代表可以读取文件中的数据。如果把权限对应到命令上,那么一旦对文件有读(r)权限,就可以对文件执行 cat、more、less、head、tail 等文件查看命令。

  • 写(w):对文件有写(w)权限,代表可以修改文件中的数据。如果把权限对应到命令上,那么一旦对文件有写(w)权限,就可以对文件执行 vim、echo 等修改文件数据的命令。注 意:对文件有写权限,是不能删除文件本身的,只能修改文件中的数据。如果要想删除文件, 则需要对文件的上级目录拥有写权限。

  • 执行(x):对文件有执行(x)权限,代表文件拥有了执行权限,可以运行。在 Linux 中,只要文件有执行(x)权限,这个文件就是执行文件了。只是这个文件到底能不能正确执行, 不仅需要执行(x)权限,还要看文件中的代码是不是正确的语言代码。对文件来说,执行(x)权限是最高权限。

权限对目录的作用。

  • 读(r):对目录有读(r)权限,代表可以查看目录下的内容,也就是可以查看目录下有哪些子文件和子目录。如果把权限对应到命令上,那么一旦对目录拥有了读(r)权限,就可 以在目录下执行 ls 命令,查看目录下的内容了。

  • 写(w):对目录有写(r)权限,代表可以修改目录下的数据,也就是可以在目录中新建、 删除、复制、剪切子文件或子目录。如果把权限对应到命令上,那么一旦对目录拥有了写(w) 权限,就可以在目录下执行 touch、rm、cp、mv 命令。对目录来说,写(w)权限是最高权限。

  • 执行(x):目录是不能运行的,那么对目录拥有执行(x)权限,代表可以进入目录。如果 把权限对应到命令上,那么一旦对目录拥有了执行(x)权限,就可以对目录执行 cd 命令,进入目录。

目录的可用权限 目录的可用权限其实只有以下几个。

  • 0:任何权限都不赋予。

  • 5:基本的目录浏览和进入权限。

  • 7:完全权限。

4)所有者和所属组命令

注:普通用户能修改所有者是自己的文件的权限;但普通用户不能修改文件的所有者(哪怕文件是属于这个普通用户的);只有超级用户才能修改所有者。

chown 命令

chown 是修改文件和目录的所有者和所属组的命令, 命令名称:chown。 英文原意:change file owner and group。 所在路径:/bin/chown。 执行权限:所有用户。 功能描述:修改文件和目录的所有者和所属组。

# 命令格式
~]# chown [选项] 所有者:所属组 文件或目录
-R:  递归设置权限,也就是给子目录中的所有文件设置权限

chgrp 命令

chgrp 是修改文件和目录的所属组的命令

命令名称:chgrp。 英文原意:change group ownership。 所在路径:/bin/chgrp。 执行权限:所有用户。 功能描述:修改文件和目录的所属组

# 命令格式
~]# chgrp [选项] 组名 文件或目录
-R:  递归设置权限,也就是给子目录中的所有文件设置权限

5)umask 默认权限

当我们登录系统之后创建一个文件或者目录总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask设置了用户创建文件的默认 权限,它与chmod的效果刚好相反 。

查看umask权限。

# 用八进制数值显示 umask权限
~]# umask
0022# 用字母表示文件和目录的初始权限
~]# umask -S
u=rwx,g=rx,o=rx#设置umask值
umask 033# 注:永久修改需要要配置/etc/profile环境变量配置文件 

umask 权限的计算方法 我们需要先了解一下新建文件和目录的默认最大权限。

  • 对文件来讲,新建文件的默认最大权限是 666,没有执行(x)权限。这是因为执行权限对文件 来讲比较危险,不能在新建文件的时候默认赋予,而必须通过用户手工赋予

  • 对目录来讲,新建目录的默认最大权限是 777。这是因为对目录而言,执行(x)权限仅仅代表 进入目录,所以即使建立新文件时直接默认赋予,也没有什么危险。 按照官方的标准算法,umask 默认权限需要使用二进制进行逻辑与和逻辑非联合运算才可以得到正确的新建文件和目录的默认权限。这种方法既不好计算,也不好理解, 所以这里还是按照权限字母来讲解 umask 权限的计算方法。我们就按照默认的 umask 值是 022 来分别计算一下新建文件和目录的默认权限吧。

  • 文件的默认权限最大只能是 666,而 umask 的值是 022 “-rw-rw-rw-”减去 “-----w--w-”等于“-rw-r--r—”

  • 目录的默认权限最大可以是 777,而 umask 的值是 022 “drwxrwxrwx”减去“d----w--w-”等于“drwx-r-xr-x”

注意:umask 默认权限的计算绝不是数字直接相减。 例如 umask 是 033

  • 文件的默认权限最大只能是 666,而 umask 的值是 033 “-rw-rw-rw-”减去“-----wx-wx”等于“-rw-r--r—”

  • 目录的默认权限最大可以是 777,而 umask 的值是 033 “drwxrwxrwx”减去“d----wx-wx”等于“drwx-r--r--”

6)附加权限(特殊权限)

StickyBit权限

占用其他人(Other)的x位显示为t或T,取决于其他人是否有x权限适用于目录,用来限制用户滥用写入权在设置了t权限的文件夹下,即使用户有写入权限,也不能删除或改名其他用户文档

格式:chmodo+t[目录]

SetGID权限

占用属组(Group)的x位显示为s或S,取决于属组是否有x权限对目录有效在一个具有SGID权限的目录下,新建的文档会自动继承此目录的属组身份

格式:chmod g+s[目录]  #赋予SGID特殊权限

acl访问策略

–能够对个别用户、个别组设置独立的权限

–大多数挂载的EXT3/4、XFS文件系统默认已支持

setfacl命令

格式:setfacl [选项] u:用户名:权限  文件...
setfacl [选项] g:组名:权限文件...

常用命令选项

-m:修改ACL策略

-x:清除指定的ACL策略

-b:清除所有已设置的ACL策略

-R:递归设置ACL策略

# ACL策略-黑名单的使用(单独拒绝某些用户)
setfacl  -m  u:用户:--- 目录

查看acl访问权限:

~]# getfacl [目录]

附加权限SUID权限(SetUID)

占用属主(User)的x位显示为s或S,取决于属主是否有x权限,仅对可执行的程序有意义当其他用户执行带SUID标记的程序时,具有此程序属主的身份和相应

~]# chmodu+s[目录]

4.帮助命令

man 命令

man 是最常见的帮助命令,也是 Linux 最主要的帮助命令 命令名称:man。 英文原意:format and display the on-line manual pages。 所在路径:/usr/bin/man。 执行权限:所有用户。 功能描述:显示联机帮助手册

使用

~]# man [选项] 命令
选项:
-f:  查看命令拥有哪个级别的帮助  或   whatis  命令
-k:  查看和命令相关的所有帮助    或  apropos  命令 ~]# man tar
#详细帮助。# 查看,命令有哪些级别
~]# man -f  cat
cat (1p)             - concatenate and print files
cat (1)              - concatenate files and print on the standard output
查看cat命令有哪几个级别的命令。

man命令帮助级别

info 命令

info 命令的帮助信息是一套完整的资料,每个单独命令的帮助信息只是这套完整资料中的某一个小章节。

常用快捷键

~]# info [参数] <命令>
?键:它就会显示info的常用快捷键。
N键:显示(相对于本节点的)下一节点的文档内容。
P键:显示(相对于本节点的)前一节点的文档内容。
U键:进入当前命令所在的主题。
M键:敲M键后输入命令的名称就可以查看该命令的帮助文档了。
G键:敲G键后输入主题名称,进入该主题。
L键:回到上一个访问的页面。
SPACE键:向前滚动一页。
BACKUP或DEL键:向后滚动一页。
Q:退出info。

help 命令

help 只能获取 Shell 内置命令的帮助 命令名称:help。 英文原意:help。 所在路径:Shell 内置命令。 执行权限:所有用户。 功能描述:显示 Shell 内置命令的帮助。 可以使用 type 命令来区分内置命令与外部命令 ,shell 是 Linux 的命令解释器

#区分是否是内外命令
~]# type  help
help is a shell builtin #表示为shell内置命令

--help 选项

绝大多数命令都可以使用“--help”选项来查看帮助,这也是一种获取帮助的方法。

例如: ~]# ls --help 这种方法非常简单,输出的帮助信息基本上是 man 命令的信息简要版

5.搜寻命令

whereis命令

whereis是搜索系统命令的命令,也就是说,whereis 命令不能搜索普通文件, 而只能搜索系统命令。 命令名称:whereis 英文原意:locate the binary, source, and manual page files for a command。 所在路径:/usr/bin/whereis。 执行权限:所有用户。 功能描述:查找二进制命令、源文件和帮助文档的命令。

~]# whereis whereis
whereis: /usr/bin/whereis /usr/share/man/man1/whereis.1.gz
#whereis 命令不仅可以查看命令位置,还可以显示帮助文档位置。

which 命令

命令名称:which。 英文原意:shows the full path of (shell) commands。 所在路径:/usr/bin/which。 执行权限:所有用户。 功能描述:列出命令的所在路径

[root@love2 ~]# which ls
alias ls='ls --color=auto'/usr/bin/ls#which命令与whereis命令类似,但是which命令会显示命令别名。

locate 命令

locate 命令才是可以按照文件名搜索普通文件的命令。

命令名称:locate。 英文原意:find files by name。 所在路径:/usr/bin/locate。 执行权限:所有用户。 功能描述:按照文件名搜索文件。

## 优点:按照数据库搜索,搜索速度快,消耗资源小。
## 数据库位置/var/lib/mlocate/mlocate.db,
## 可以使用 updatedb 命令强制更新数据库。
## 缺点:只能按照文件名来搜索文件,而不能执行更复杂的搜索,比如按照权限、大小、修改时间等搜索文件。 ~]# locate edu.txt
/root/edu.txt

配置文件 /etc/updatedb.conf

PRUNE_BIND_MOUNTS = "yes" #开启搜索限制,使该配置文件生效。
PRUNEFS = "9p afs anon_inodefs.... # 在 locate执行搜索时,禁止搜索这些文件系统类型
PRUNENAMES = ".git .hg .svn..."  #禁止搜索以这些后缀名结尾的文件
PRUNEPATHS = "/afs /media /mnt /net /sfs /tmp /udev ..." #不搜索这些目录

find 命令

命令名称:find。 英文原意:search for files in a directory hierarchy。 所在路径:/bin/find。 执行权限:所有用户。 功能描述:在目录中搜索文件。(精确搜索)

按照文件名搜寻

~]# find 搜索路径 [选项] 搜索内容
选项:
-name: 按照文件名搜索
-iname: 按照文件名搜索,不区分文件名大小写
-inum: 按照inode号搜索

按照文件大小搜索

~]# find 搜索路径 [选项] 搜索内容
选项: -size [+|-]大小:
按照指定大小搜索文件 这里的“+”的意思是搜索比指定大小还要大的文件,“-”的意思是搜索比指定大小还要小的文件.
1bytes=8byte,我们在电脑上可见的最小单位为字节
`b'    for  512-byte  blocks (this is the default if no suffix   is used)
# 这里是默认单位,如果单位为b或不写单位,则按照512Byte`c'    for bytes
# 搜索单位是c,按字节搜索字节 `w'    for two-byte words
# 搜索单位是w,按照算字节(中文)搜索`k'    for Kilobytes (units of 1024 bytes)
# 按照KB单位搜索,必须是小k
`M'    for Megabytes (units of 1048576 bytes)
# 按照MB单位搜索,必须是大写的M`G'    for Gigabytes (units of 1073741824 bytes)
#按照GB单位搜索,必须是大写的G# 用法示例
~]# find . -size 442c
./edu.txt

按照修改时间搜索

Linux 中的文件有访问时间(atime)、数据修改时间(mtime)、状态修改时间(ctime)这三个 时间,我们也可以按照时间来搜索文件。

~]# find 搜索路径 [选项] 搜索内容 选项:
-atime [+|-]时间: 按照文件访问时间搜索
-mtime [+|-]时间: 按照文件数据修改时间搜索
-ctime [+|-]时间: 按照文件状态修改时间搜索【+/-】时间的含义(以10为例):
-10:代表10天内修改的文件
10(不写+—):则代第十天修改的文件
+10:代表10天之前修改的文件

按照权限搜索命令格式。

~]# find 搜索路径 [选项] 搜索内容
选项:
-perm 权限模式: 查找文件权限刚好等于“权限模式”的文件
-perm -权限模式: 查找文件权限全部包含“权限模式”的文件
-perm +权限模式: 查找文件权限包含“权限模式”的任意一个权限的文件 

按照所有者和所属组搜索

~]#
find 搜索路径 [选项] 搜索内容
选项:
-uid 用户ID:  按照用户ID查找所有者是指定ID的文件
-gid 组ID:   按照用户组ID查找所属组是指定ID的文件
-user 用户名:  按照用户名查找所有者是指定用户的文件
-group 组名:  按照组名查找所属组是指定用户组的文件
-nouser:   查找查找没有所有者的文件,主要用于查找垃圾文件

按照文件类型搜索

~]# find 搜索路径 [选项] 搜索内容
选项:
-type d:  查找目录
-type f:  查找普通文件
-type l:  查找软链接文件
-type s : 查找套接字文件 

逻辑运算符

用于连接多个条件.
选项:
-a:  and逻辑与
-o:  or逻辑或
-not: not逻辑非/[!]
~]# find . -size +442c  -a  -type f
#查找当前路径下大于442字节且类型为普通文件的文件。

其他选项

-exec

~]# find 搜索路径 [选项] 搜索内容 -exec 命令2 {} ;

这个选项的作用其实是把 find 命令的结果交给由“-exec”调用的命令 2 来处理。“{}”就 代表 find 命令的查找结果。

-ok 选项

“-ok”选项和“-exec”选项的作用基本一致,

区别在于:“-exec”的命令 2 会直接处理,而不询 问;“-ok”的命令 2 在处理前会先询问用户是否这样处理,在得到确认命令后,才会执行

~]# find -size +442k  -a  -type f -ok wc -l {} \;
查找大于442k,文件类型为普通文件的文件,且统计每个文件的行数。

grep 命令

grep 的作用是在文件中提取和匹配符合条件的字符串行,支持正则匹配。(模糊搜索)

~]# grep [选项] "搜索内容" 文件名
选项:
-i:    忽略大小写
-n:    输出行号
-v:    反向查找
--color=auto: 搜索出的关键字用颜色显示 

find与grep的区别

  • find 命令用于在系统中搜索符合条件的文件名,如果需要模糊查询,则使用通配符进行匹配,通配符 是完全匹配(find 命令可以通过-regex 选项,把匹配规则转为正则表达式规则,但是不建议如此)

  • grep 命令用于在文件中搜索符合条件的字符串,如果需要模糊查询,则使用正则表达式进行匹配, 正则表达式是包含匹配。

通配符:用于匹配文件名,完全匹配

通配符 作用
? 匹配一个任意字符
* 匹配 0 个或任意多个任意字符,也就是可以匹配任何内容
[] 匹配中括号中任意一个字符。例如,[abc]代表一定匹配一个字符,或者是 a,或者是 b,或者是 c
[-] 匹配范围内一个任意字符例如,-代表一个范围[1-9],匹配1-9中的任意一个字符;英文必须大写的在前面[A-z];
[^] 表示匹配不是中括号内的一个字符。例如,[ ^0-9]代表匹配一个不是数字的字符
{} 多组不同的字符串,全匹配{a,min,xy}

正则表达试:用于匹配字符串,包含匹配

正则 作用
? 匹配前一个字符重复 0 次,或 1 次(?是扩展正则,需要使用 egrep 命令)
* 匹配前一个字符重复 0 次,或任意多次
[] 匹配中括号中任意一个字符。例如,[abc]代表一定匹配一个字符,或者是 a,或者是 b,或者是 c
[-] 匹配范围内一个任意字符例如,[1-9],匹配1-9中的任意一个字符
[^] 表示匹配不是中括号内的一个字符。例如,0-9代表匹配一个不是数字的字符
^ 匹配行首
$ 匹配行尾

6.其他命令

管道符(文本流)

注:管道符后就会变成文本,故管道后可接grep

命令格式: 命令 1 | 命令 2 命令 1 的正确输出作为命令 2 的操作对象.

~] ll -a /etc/  | more
#列出/etc目录下所有文件,且分页显示。

netstat命令(与ss命令一样)

利用 netstat 指令可让你得知整个 Linux 系统的网络情况。

~]# netstat [选项]
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。# 提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到#示例,查看正在连接的数量
]# netstat -an | grep ESTABLISHED
tcp        0      0 172.17.0.51:22          172.17.0.43:51198       ESTABLISHED

alias 命令的别名

命令的别名,就是命令的小名,主要是用于照顾管理员使用习惯的。

~]# alias grep='grep --color=auto'
# 执行 grep命令时,其实是执行 grep --color=auto 目的是自动显示颜色# 可以在命令行中直接设置,但是是临时生效,重启就没了,可写到文件里,
~]# vim ~/.bashrc~]# unalias 命令
#取消别名

快捷键

tab 命令或路径等的补全键,linux用的最多的一个快捷键
ctrl+a 光标迅速回到行首
ctrl+e 光标迅速回到行尾
ctrl+f 光标向右移动一个字符
ctrl+b 光标向左移动一个字符
ctrl+insert 复制命令行内容(mac系统不能使用)
shift+insert 粘贴命令行内容(mac系统不能使用)
ctrl+k 剪切(删除)光标处到行尾的所有字符
ctrl+u 剪切(删除)光标处到行首的所有字符
ctrl+w 剪切(删除)光标前的一个字符
ctrl+y 粘贴 ctrl+k、ctrl+u、ctrl+w删除的字符
ctrl+c 中断终端正在执行的任务并开启一个新的一行
ctrl+h 删除光标前的一个字符(相当于退格键)
ctrl+d 退出当前shell命令行,如果是切换过来的用户,则执行这个命令回退到原用户
ctrl+r 搜索命令行使用过的历史命令记录
ctrl+m 回车
ctrl+g 从ctrl+r的搜索历史命令模式中退出
ctrl+l 清楚屏幕所有的内容,并开启一个新的一行
ctrl+s 锁定终端,使之任何人无法输入
ctrl+q 解锁ctrl+s的锁定状态
ctrl+z 暂停在终端运行的任务,使用"fg"命令可以使暂停恢复
!! 执行上一条命令
!pw 这是一个例子,是执行以pw开头的命令,这里的pw可以换成任何已经执行过的字符
!pw:p 这是一个例子,是仅打印以pw开头的命令,但不执行,最后的那个“p”是命令固定字符
!num 执行历史命令列表的第num条命令,num代指任何数字(前提是历史命令里必须存在)
!$ 代指上一条命令的最后一个参数,该命令常用于shell脚本中
esc+. 注意那个".“ 意思是获取上一条命令的(以空格为分隔符)最后的部分
esc+b 移动到当前单词的开头
esc+f 移动到当前单词的结尾
alt+. 使用前一个命令的最后一个词
方向建(上下键) 历史命令

重定向

类型 操作符 用途
覆盖重定向输出 > 将命令行的正常执行输出覆盖保存到文件
追加重定向输出 >> 将命令行的正常执行输出追加保存到文件
覆盖重定向错误输出 2> 将命令行的错误执行输出覆盖保存到文件
追加重定向错误输出 2>> 将命令行的错误执行输出追加保存到文件
混合重定向 &> 将错误和正确的输出都覆盖到同一个文件
混合重定向 &>> 将错误和正确的输出都追加到同一个文件

7.压缩与解压缩命令

在 Linux 中可以识别的常见压缩格式有十几种,比如:".zip"、".gz"、".bz2"、“tar”、".tar.gz"、".tar.bz2"等等

".zip" 格式

".zip" 是 Windows 中最常用的压缩格式,Linux 也可正确识别 ".zip" 格式,这可以方便的和 Windows 系统通用压缩文件。

".zip" 格式压缩命令:

zip [选项] 压缩包名 源文件或源目录 选项: ​ -r:压缩目录

~]# zip mytxt.zip abc.txt abd.txt bcd.txt adding: abc.txt (deflated 6%)adding: abd.txt (stored 0%)adding: bcd.txt (stored 0%)
# 把三个 txt 文件压缩成一个 zip 文件

".zip" 格式解压缩命令:

unzip [选项] 压缩包名 选项: -d:指定解压缩位置

~]# unzip -d /home/hepingfly/abc/ mytxt.zip
Archive:  mytxt.zipinflating: /home/hepingfly/abc/abc.txt  extracting: /home/hepingfly/abc/abd.txt  extracting: /home/hepingfly/abc/bcd.txt  # 如果不指定 -d 参数,默认解压到当前目录下

".gz" 格式(不能打包)

".gz" 格式压缩命令:

gzip [选项] 源文件 选项: ​-c:将压缩数据输出到标准输出中,可以用于保留源文件 ​ -d:解压缩 ​ -r:压缩目录 注:gzip 压缩文件后会把源文件删除掉,它是不支持保留源文件的

~]# gzip abc.txt
~]# ll
总用量 12
-rw-rw-r--. 1 hepingfly hepingfly   60 2月  22 01:33 abc.txt.gz
# 压缩完之后源文件也会被删除掉----------------------------------------------------------------------------
~]# gzip -c bcd.txt > bcd.txt.gz
~]# ll
总用量 16
-rw-------. 1 hepingfly hepingfly    0 2月  21 00:37 bcd.txt
-rw-r--r--. 1 root      root        28 2月  25 00:55 bcd.txt.gz# 你使用 gzip -c bcd.txt 命令,会把压缩数据输出到屏幕上,现在我不让它输出到屏幕上,而是重定向到一个压缩文件中,这样就实现了在压缩你文件的同时不删除源文件----------------------------------------------------------------------------
~]# gzip -r aaaa/
~]# ll aaaa/
总用量 8
-rw-r--r--. 1 root root 26 2月  25 01:02 a.txt.gz
-rw-r--r--. 1 root root 26 2月  25 01:02 b.txt.gz
# 你使用 gzip -r 命令,它是把这个目录下的所有文件都压缩,而不会把这个目录压缩(不能打包)

**".gz" 格式解压缩命令:

gzip -d 压缩包名 gunzip 压缩包名 上面两个命令都可以

".bz2 格式(不能压缩目录)"

".bz2" 格式,是 Linux 的另一种压缩格式,从理论上来讲,".bz2" 格式的算法更先进、压缩比更好;而 ".gz" 格式相对来讲压缩时间更快

".bz2" 格式压缩命令:

bzip2 [选项] 源文件 选项: ​ -d:解压缩 ​ -k:压缩时保留源文件 ​ -v:显示压缩的详细信息

~]# bzip2 -k bcd.txt
~]# ll
总用量 20
-rw-------. 1 hepingfly hepingfly    0 2月  21 00:37 bcd.txt
-rw-------. 1 hepingfly hepingfly   14 2月  21 00:37 bcd.txt.bz2# 保留源文件压缩

注:

这条命令不能压缩目录,压缩目录就会报错。前面的 gzip 命令是不能打包,你用 gzip 命令压缩目录,它会把你目录下的文件进行压缩,不会把你这个目录进行压缩

".bz2" 格式解压缩命令:

bzip2 -d 压缩包 bunzip2 压缩包 上面两个命令都可以

tar命令

".tar" 格式的打包和解打包都使用 tar 命令,区别只是选项不同。

".tar" 格式打包命令:

tar [选项] [-f 压缩包名] 源文件或目录 选项: ​ -c:打包 ​ -f:指定压缩包的文件名。压缩包的扩展名是用来给管理员识别格式的,所以一定要正确指定扩展名。 ​ -v:显示打包文件过程

# 归档(打包)
~]# tar -cvf test.tar abd.txt bcd.txt
abd.txt
bcd.txt

".tar" 格式解打包命令:

tar [选项] 压缩包 选项: ​ -x:解打包 ​ -f:指定压缩包的文件名 ​ -v:显示解打包文件过程

-t: 显示归档中的文件清单(不解压)

~]# tar -xvf test.tar
abd.txt
bcd.txt
~]# tar -tf test.tar
abd.txt
bcd.txt

".tar.gz" 和 ".tar.bz2" 格式

使用 tar 命令直接打包压缩

tar [选项] 压缩包 源文件或目录 选项: ​ -z:压缩和解压缩 ".tar.gz" 格式 ​ -j: 压缩和解压缩 ".tar.bz2" 格式

-C:指定目录

-J:压缩和解压缩 ".tar.xz" 格式

# 压缩
~]# tar -jcvf test.gz.bz2 abd.txt bcd.txt
abd.txt
bcd.txt
~]# ll
总用量 24
-rw-r--r--. 1 root      root        160 2月  25 23:11 test.gz.bz2
---------------------------------------------------------------
# 解压缩
~]# tar -jxvf test.gz.bz2
abd.txt
bcd.txt
----------------------------------------------------------------
# 压缩
~]# tar -zcvf test.tar.gz abd.txt bcd.txt
abd.txt
bcd.txt
~]# ll
总用量 12
-rw-r--r--. 1 root      root         0 2月  22 02:09 abd.txt
-rw-------. 1 hepingfly hepingfly    0 2月  21 00:37 bcd.txt
-rw-r--r--. 1 root      root       154 2月  25 23:14 test.tar.gz
----------------------------------------------------------------
# 解压缩
~]# tar -zxvf test.tar.gz
abd.txt
bcd.txt--------------------------------------------------------------
# 只查看不解压
~]# tar -ztvf test.tar.gz
-rw-r--r-- root/root         0 2019-02-22 02:09 abd.txt
-rw------- hepingfly/hepingfly 0 2019-02-21 00:37 bcd.txt--------------------------------------------------------------
# 解压到指定目录(-C 一定要跟在压缩包后面)
~]# tar -zxvf test.tar.gz -C aaaa/
abd.txt
bcd.txt--------------------------------------------------------------
# 解压指定文件
~]# tar -ztvf test.tar.gz         # 我先查看这个压缩包里面有哪些文件
-rw-r--r-- root/root         0 2019-02-22 02:09 abd.txt
-rw------- hepingfly/hepingfly 0 2019-02-21 00:37 bcd.txt
[root@hepingfly hepingfly]# tar -zxvf test.tar.gz -C aaaa/ abd.txt
abd.txt
# 我只把 abd.txt 文件解压到 aaaa 目录下

8.关机和重启命令

sync 命令

命令名称:sync 英文原意:flush file system buffers 所在路径:/bin/sync 执行权限:所有用户 功能描述:刷新文件系统缓冲区。

注:关机之前执行可同步数据

shutdown 命令

命令名称:shutdown 英文原意:bring the system down 所在路径:/sbin/shutdown。 执行权限:超级用户。 功能描述:关机和重启命令的基本格式如下:

注:在那时的 Linux 中,只有 shutdown 命令在关机或重启之前会正确地中止进程及服务,所以我们一直认为 shutdown 才是最安全的关机与重启命令

~]# shutdown [选项] 时间 [警告信息]
-c:  取消已经执行的shutdown命令
-h:  关机
-r:  重启 3#示例
~]# shutdown -r now
#重启, now是现在重启的意思
~]# shutdown -r 05:30
#指定时间重启,但会占用前台终端
~]# shutdown -r 05:30 &
#把定义重启命令放入后台,&是后台的意思
~]# shutdown -c
# 取消定时重启
~]# shutdown -r +10
# 10分钟之后重启# 关机和定时关机
~]# shutdown -h now
#现在关机
~]# shutdown -h 05:30
#指定时间关机

reboot 命令

#在现在的系统中,reboot 命令也是安全的,而且不需要加入过多的选项
~]# reboot    #重启
-f: 强制

halt 和 poweroff 命令

这两个都是关机命令,直接执行即可。这两个命令不会完整关闭和保存系统的服务,类似于我们直接手动电源键关机。不建议使用。

~]# halt
~]# poweroff 

init 命令

init 是修改 Linux 运行级别的命令,也可以用于关机和重启。这个命令并不安全,不建议使用。

~]# init 0 关机
~]# init 6 重启

9.网络命令

配置ip

配置 IP 地址

IP 地址是计算机在互联网中唯一的地址编码。每台计算机如果需要接入网络和其他计算机进行数 据通信,就必须配置唯一的公网 IP 地址。 配置 IP 地址有两种方法: 1)setup 工具

  • 命令名称:setup。

  • 英文原意:A text mode system configuration tool。

  • 所在路径:/usr/bin/setup。

  • 执行权限:所有用户。

  • 功能描述:系统配置工具

注: Red Hat 系列专有的命令,其他的 Linux 系列不一定有此命令

2)手工修改配置文件

~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 # 重启网络服务
~]# service  network  restart

3)在虚拟机上复制的虚拟机ip报错

复制镜像有可能需要重置 UUID(唯一识别符)

~]# vi  /etc/sysconfig/network-scripts/ifcfg-eth0
#删除MAC地址行 ~]# rm  -rf  /etc/udev/rules.d/70-persistent-net.rules
#删除MaC地址和UUID绑定文件 ~]# reboot #重启Linux 

ip命令

ip 命令的功能很多!基本上它整合了 ifconfig 与 route 这两个命令,不过ip 的功能更强大! 如果您有兴趣的话,请自行 vi /sbin/ifup 就知道整个 ifup 就是利用 ip 这个命令来实现的

~]# ip [选项] [动作] [命令]
选项 :设定的参数,主要有:
-s :显示出该设备的统计数据(statistics),例如总接受封包数等;
动作:就是是可以针对哪些网络参数进行动作,包括有:
link :关于设备 (device) 的相关设定,包括 MTU, MAC 地址等等
addr/address :关于额外的 IP 设定,例如多 IP 的实现等等;
route :与路由有关的相关设定

于设备(device) 的相关设定: ip link

ip link 可以设定与设备 (device) 有关的相关设定,包括 MTU 以及该网络设备的 MAC 等等, 当然也可以启动 (up) 或关闭 (down) 某个网络设备。整个语法是这样的:

~]# ip [-s] link show <== 单纯的查阅该设备相关的信息
~]# ip link set [device] [动作与参数]# 参数
show:仅显示出这个设备的相关内容,如果加上 -s 会显示更多统计数据;set :可以开始设定项目, device 指的是 eth0, eth1 等等设备代号;# 动作与参数:包括以下动作:
up|down :启动 (up) 或关闭 (down) 某个设备,其他参数使用预设的以太网参数;address :如果这个设备可以更改 MAC ,用这个参数修改;
name   :给予这个设备一个特殊的名字;
mtu    :设置最大传输单元。 

nmcli命令

nmcli命令 是 NetworkManager client 网络管理客户端

~]# nmcli [OPTIONS] OBJECT { COMMAND | help }
OPTIONS
-t[erse]                                  # terse output 简洁的输出
-p[retty]                                 # pretty output 漂亮的输出
-m[ode] tabular|multiline                 # output mode  输出模式
-f[ields] <field1,field2,...>|all|common  # specify fields to output 指定要输出的字段
-e[scape] yes|no                          # escape columns separators in values 在值中转义列分隔符
-n[ocheck]                                # 不要检查nmcli和NetworkManager版本
-a[sk]                                    # 要求缺少参数
-w[ait] <seconds>                         # 设置超时等待整理操作
-v[ersion]                                # 显示程序版本
-h[elp]                                   # 打印此帮助OBJECT
g[eneral]       NetworkManager的一般状态和操作
n[etworking]    整体组网控制
r[adio]         NetworkManager切换开关
c[onnection]    NetworkManager的连接
d[evice]        由NetworkManager管理的设备
a[gent]         NetworkManager秘密代理或polkit代理# 实例
nmcli connection show           # 查看当前连接状态
nmcli connection reload         # 重启服务
nmcli connection show -active   # 显示活动的连接
nmcli connection show "lan eth0"# 显示指定一个网络连接配置
nmcli device status             # 显示设备状态
nmcli device show eno16777736   # 显示指定接口属性
nmcli device show               # 显示全部接口属性
nmcli con up static             # 启用static连接配置
nmcli con up default            # 启用default连接配置
nmcli con add help              # 查看帮助

ifconfig 命令

命令名称:ifconfig。 英文原意:configure a network interface。 所在路径:/sbin/ifconfig。 执行权限:超级用户 功能描述:查看ip地址相关信息

~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:39:48:4Amac地址  inet addr:100.100.100.22  Bcast:100.100.100.255  Mask:255.255.255.0ipv4地址                        广播                      子网掩码inet6 addr: fe80::20c:29ff:fe39:484a/64 Scope:Linkipv6地址UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:158 errors:0 dropped:0 overruns:0 frame:0TX packets:115 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:16810 (16.4 KiB)  TX bytes:14897 (14.5 KiB)接受的数据包情况               发送的数据包情况
lo        Link encap:Local Loopback
本机回环网卡inet addr:127.0.0.1  Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

ping 命令

ping 是常用的网络命令,主要通过 ICMP 协议进行网络探测,测试网络中主机的通信情况。 命令名称:ping。 英文原意:send ICMP ECHO_REQUEST to network hosts。 所在路径:/bin/ping。 执行权限:所有用户。 功能描述:向网络主机发送 ICMP 请求。

~]# ping [选项] IP
选项:
-b:   后面加入广播地址,用于对整个网段进行探测
-c 次数: 用于指定ping的次数
-s 字节: 指定探测包的大小 

netstat 命令与ss一样

netstat 是网络状态查看命令,既可以查看到本机开启的端口,也可以查看有哪些客户端连接,在 CentOS 7.x 中 netstat 命令默认没有安装,如果需要使用,需要安装 net-snmp 和 net-tools 软件包。 命令名称:netstat。 英文原意:Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships 所在路径:/bin/netstat 执行权限:所有用户。 功能描述:输出网络连接、路由表、接口统计、伪装连接和组播成员

~]# netstat [选项]
选项:
-a:   列出所有网络状态,包括Socket程序
-c 秒数: 指定每隔几秒刷新一次网络状态
-n:   使用IP地址和端口号显示,不使用域名与服务名
-p:   显示PID和程序名
-t:   显示使用TCP协议端口的连接状况
-u:   显示使用UDP协议端口的连接状况
-l:   仅显示监听状态的连接
-r:   显示路由表# 查看所有连接
~]# netstat -an
协议  接收数据 发送..   本机ip与端口               远程ip与端口              状态            进程id和服务名
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 0.0.0.0:52326               0.0.0.0:*                   LISTEN      1297/rpc.statd
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      1275/rpcbind
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1517/sshd
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      1352/cupsd
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1596/master         #  State:状态详解
常见的状态主要有以下几种。
- LISTEN:监听状态,只有 TCP 协议需要监听,而 UDP 协议不需要监听。
- ESTABLISHED:已经建立连接的状态。如果使用“-l”选项,则看不到已经建立连接的状态。
- SYN_SENT:SYN 发起包,就是主动发起连接的数据包。
- SYN_RECV:接收到主动连接的数据包。
- FIN_WAIT1:正在中断的连接。
- FIN_WAIT2:已经中断的连接,但是正在等待对方主机进行确认。
- TIME_WAIT:连接已经中断,但是套接字依然在网络中等待结束。
- CLOSED:套接字没有被使用。
在这些状态中,我们最常用的就是 LISTEN 和 ESTABLISHED 状态,一种代表正在监听,另一种代表已经建立连接。 

write 命令

命令名称:write 英文原意:send a message to another user 所在路径:/usr/bin/write。 执行权限:所有用户 功能描述:向其他用户发送信息

登录终端模式 终端数 命令
本地字符终端 tty1-6 alt+F1-6
本地图形终端 tty7 ctrl+alt=F7(按住3秒,需要安装启动图形界面)
远程终端 pts/0-255
# 先查看有哪些远程终端
~]#w
09:48:23 up 3 days, 13:58,  3 users,  load average: 0.00, 0.02, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    172.17.0.43      09:24    7.00s 41.41s  0.00s w
root     pts/1    172.17.0.43      09:25   23:23   0.01s  0.01s -bash
root     pts/2    172.17.0.43      09:25   23:14   0.01s  0.01s -bash#输入命令直接回车(ctrl+D保存退出)
~]# write root  tty1
# 向 在 tty1(本地终端 1 )登 录 的 root  用户发送信息,使用“ Ctrl+D ” 快捷键 保存发送 的 数据
123#客户端查看
~]#
Message from root@VM-0-51-centos on pts/0 at 09:50 ...
123

wall 命令

write 命令用于给指定用户发送信息,而 wall 命令用于给所有登录用户发送信息,包括你自己。

~]# wall 123456
[root@localhost ~]#
Broadcast message from root@localhost.localdomain (pts/0) (Wed Nov 27 16:02:15 2019):123456

mail 命令

mail 是 Linux 的邮件客户端命令,可以利用这个命令给其他用户发送邮件。 命令名称:mail。 英文原意:send and receive Internet mail。 所在路径:/bin/mail。 执行权限:所有用户。 功能描述:发送和接收电子邮件。

发送邮件

~]# mail root 给root发送邮件
Subject: .....   #主题
ni jiu shi ge dd #内容
.   # . 结束邮件
EOT

发送文件内容

我们在写脚本时,有时需要脚本自动发送一些信息给指定用户,把要发送的信息预先写到文件中

~]# mail -s 'test ' root < /root/anaconda-ks.cfg
You have mail in /var/spool/mail/root
选项:
-s:  指定邮件标题
# 把 /root/anaconda-ks.cfg 文件 的 内容发送给 root 用户

读取邮件

~]# mail
Heirloom Mail version 12.4 7/29/08.  Type ? for help.
"/var/spool/mail/root": 2 messages 2 new
>N  1 root                  Wed Nov 27 16:05  18/612   "haha"
N  2 root                  Wed Nov 27 16:08  77/2106  "test"
& # N:表示新邮箱  1:标题  root:发件人的姓名 Wed Nov 27 16:05  18/612:时间  "haha":邮件的标题
# 常用命令
? 显示帮助
h: headers:列出邮件标题列表
d: delete:删除指定邮件。比如想要删除第二封邮件,可以输入“d 2”。
s: save:保存邮件。可以把指定邮件保存成文件,如“s 2 /tmp/test.mail”。
quit:退出,并把已经操作过的邮件进行保存。比如移除已删除邮件、保存已阅读邮件等。
exit:退出,但是不保存任何操作。
注:邮件默认保存地址~]# ls /var/spool/mail/
rpc user1

10.系统痕迹命令

linux会记录用户使用linux的痕迹,系统中有一些重要的痕迹日志文件,如/var/log/wtmp、/var/run/utmp、/var/log/btmp、/var/log/lastlog 等日志文件,如果你用 vim 打开这些文件,你会发现这些文件是二进制乱码。这是由于这些日志中保存的是系统的重要登录痕迹,包括某个用户何时登录了系统,何时退出了系统,错误登录等重要的系统信息。这些信息要是可以通过 vim 打开,就能编辑,这样痕迹信息就不准确,所以这些重要的痕迹日志,只能通过对应的命令来进行查看。

w 命令

w 命令是显示系统中正在登陆的用户信息的命令,这个命令查看的痕迹日志是/var/run/utmp。 命令名称:w 英文原意:Show who is logged on and what they are doing. 所在路径:/usr/bin/w 执行权限:所有用户 功能描述:显示登录用户,和他正在做什么

注:CPU/内存原则,70/90

~]# w
11:04:07     up 22:52,      1 user,      load average: 0.00, 0.01, 0.05USER         TTY          FROM                     LOGIN@       IDLE           JCPU           PCPU                     WHAT
root         pts/0        100.100.100.1             10:19        7.00s          0.13s          0.00s                     w# 详细参数解释
# load average:
系统在之前 1 分钟、5 分钟、15 分钟的平均负载。如果 CPU 是单核的,则这个数值 超过 1 就是高负载;如果 CPU 是四核的,则这个数值超过 4 就是高负载 (这个平均负载完全是依据个人经验来进行判断的,一般认为不应该超过服务器 CPU 的核数。# TTY:
登陆的终端: tty1-6:本地字符终端(alt+F1-6 切换);tty7:本地图形终端(ctrl+alt+F7 切换,必须安装启动图形界面);pts/0-255:远程终端。
第一行的内容
11:04:07 系统当前时间时间
up 22:52 持续开机时间
1 user 登陆用户
load average: 0.00, 0.01, 0.05 系统CPU在1分钟,5分钟,15分钟前的平均负载
第二行的内容
USER 登录用户
TTY() 登录终端
FROM 从哪一个地址登录
LOGIN@ 本地登录为空
IDLE 登陆时间
JCPU 用户闲置时间
PCPU 所有的进程占用的CPU时间
WHAT 用户正在进行的操作

who 命令

who 命令和 w 命令类似,用于查看正在登陆的用户,但是显示的内容更加简单,也是查看/var/run/utmp 日志。

~]# who
root     pts/0        2019-11-26 10:19 (100.100.100.1)

users

users与who , w 命令类似,用于查看正在登陆的用户

last 命令

last 命令是查看系统所有登陆过的用户信息的,包括正在登陆的用户和之前登陆的用户。这个命令查看的是/var/log/wtmp 痕迹日志文件.

~]# last
root     pts/0        100.100.100.1     Wed Aug 14 17:09 - 19:58  (02:48)
root     pts/0        100.100.100.1     Wed Aug 14 17:07 - 17:08  (00:01)
reboot   system boot  3.10.0-957.21.3. Wed Aug 14 17:06 - 00:14  (07:08)
#系统重启信息记录
root     pts/0        100.100.100.1     Wed Aug 14 17:02 - down   (00:03)
#用户名   终端号         来源IP地址             登陆时间 - 退出时间     

lastlog 命令

lastlog 命令是查看系统中所有用户最后一次的登陆时间的命令,他查看的日志是/var/log/lastlog文件

~]# lastlog
Username         Port     From             Latest
root             pts/0    100.100.100.1     Tue Nov 26 10:19:33 +0800 2019
bin                                        **Never logged in**
daemon                                     **Never logged in**
#用户名()          终端     来源IP              登陆时间

lastb 命令

lastb 命令是查看错误登陆的信息的,查看的是/var/log/btmp 痕迹日志:

~]# lastb

11.挂载命令

mount 命令基本格式

linux 所有存储设备都必须挂载使用,包括硬盘 命令名称:mount 命令所在路径:/bin/mount 执行权限:所有用户

~]# mount -l
# 查询系统中已经挂载的设备,
-l 会显示卷标名称 ~]# mount –a
# 依据配置文件 /etc/fstab 的内容,自动挂载 ~]# mount [-t 文件系统] [-L 卷标名] [-o 特殊选项]  设备文件名 挂载点
-t 文件系统: 加入文件系统类型来指定挂载的类型,可以 ext3、ext4、iso9660 等文件系统。
-L 卷标名:  挂载指定卷标的分区,而不是安装设备文件名挂载
-o 特殊选项: 可以指定挂载的额外选项,比如读写权限、同步异步等,如果不指定,则默认值生效:例1 :比如在进行系统修复时,使用光盘修复模式时,/ 分区默认是只读,我们需要进行从新挂载/分区。
~]# mount -o remount,rw /
例2 :挂载分区
~]# mkdir /mnt/disk1 # 建立挂载点目录
~]# mount /dev/sdb1 /mnt/disk1 # 挂载分区

特殊选项:

注:特殊权限不建议改,一般remount用于修改权限

光盘挂载

光盘挂载的前提依然是指定光盘的设备文件名,不同版本的 Linux,设备文件名并不相同。 CentOS 5.x 以前的系统,光盘设备文件名是/dev/hdc CentOS 6.x 以后的系统,光盘设备文件名是/dev/sr0 不论哪个系统都有软连接/dev/cdrom,与可以作为光盘的设备文件名

~]# mkdir /mnt/cdrom #必须是空目录
~]# mount -t iso9660 /dev/cdrom /mnt/cdrom/
# 挂载光盘;-t指定光盘类型可以不写,因为系统默认识别;如果报没有光盘则添加-t# 用完之后记得卸载:
~]# umount /dev/sr0
~]# umount /mnt/cdrom
#因为设备文件名和挂载点已经连接到一起,卸载哪一个都可以  注意:卸载的时候需要退出光盘目录,才能正常卸载.

挂载 U 盘

U 盘会和硬盘共用设备文件名,所以 U 盘的设备文件名不是固定的,需要手工查询

# 查询命令:
~]# fdisk -l #查询硬盘然后就是挂载# 挂载命令如下:
~]# mount -t vfat /dev/sdb1 /mnt/usb/
# 挂载 U 盘。因为是 Windows 分区,所以是 vfat 文件系统格式

如果 U 盘中有中文,会发现中文是乱码。Linux 要想正常显示中文,需要两个条件:

  • 安装了中文编码和中文字体

  • 操作终端需要支持中文显示(纯字符终端,是不支持中文编码的) 而我们当前系统是安装了中文编码和字体,而 xshell 远程终端是 Windows 下的程序,当然是支持 中文显示的。那之所以挂载 U 盘还出现乱码,是需要在挂载的时候,手工指定中文编码。

挂载命令如下:
~]# mount -t vfat -o iocharset=utf8 /dev/sdb1 /mnt/usb/
# 挂载 U 盘,指定中文编码 格式 为 UTF-8
卸载命令如下:
~]# umount /mnt/usb/ # 查看编码
~]# echo $LANG
en_US.utf8

挂载 NTFS 分区

linux默认不识别NTFS分区的

Linux 的驱动加载顺序:

  • 驱动直接放入系统内核之中。这种驱动主要是系统启动加载必须的驱动,数量较少。

  • 驱动以模块的形式放入硬盘。大多数驱动都已这种方式保存,保存位置在 /lib/modules/3.10.0-862.el7.x86_64/kernel/中。

  • 驱动可以被 Linux 识别,但是系统认为这种驱动一般不常用,默认不加载。如果需要加载这种驱动,需要重新编译内核,而 NTFS 文件系统的驱动就属于这种情况。

使用 NTFS-3G 安装 NTFS 文件系统模块:

~]# wget https://tuxera.com/opensource/ntfs-3g_ntfsprogs-2017.3.23.tgz #下载驱动
~]# tar -zxvf ntfs-3g_ntfsprogs-2017.3.23.tgz # 解压
~]# cd ntfs-3g_ntfsprogs-2017.3.23 # 进入解压目录
~]# ./configure # 编译器准备。没有指定安装目录,安装到默认位置中
~]# make # 编 译
~]# make install # 编译安装# 挂载
~]# mount –t ntfs-3g /dev/sdb1 /mnt/win 

十.vim命令

vi编辑器简介

  • vi编辑器是Linux和Unix上最基本的文本编辑器,工作在字符模式下。由于不需要图形界面,vi是效率很高的文本编辑器。尽管在Linux上也有很多图形界面的编辑器可用,但vi在系统和服务器管理中的功能是那些图形编辑器所无法比拟的。

  • vi 编辑器并不是一个排版程序,它不像Word或WPS那样可以对字体、格式、段落等其他属性进行编排,它只是一个文本编辑程序。没有菜单,只有命令,且命令繁多。vi有3种基本工作模式:命令行模式、文本输入模式和末行模式。

  • Vim是vi的加强版,比vi更容易使用。vi的命令几乎全部都可以在vim上使用

    # 如果用不惯vim择可以设置别名
    ~]# alias vi='vim'
    # 永久设置
    ~]# vi .bashrc
    # User specific aliases and functions
    alias rm='rm -i'
    alias cp='cp -i'
    alias mv='mv -i'
    alias vi='vim'

vim编辑器简介

vim 是一个全屏幕纯文本编辑器,是 vi 编辑器的增强版,我们主要讲解的是 vim 编辑器

基本使用

vim 的工作模式

命令模式:是主要使用快捷键的模式,命令模式想要进入输入模式,可以使用以下的方式:

命令 作用
a 在光标所在字符后插入
A 在光标所在行尾插入
i 在光标所在行前插入
I 在光标所在行首插入
o 在光标下插入新行
O 在光标上插入新行

输入模式:主要用于文本编辑,和记事本类似,输入数据就好

末行模式

:w  保存不退出
:w(大写) + 新文件名 把文件另存为新文件
:q  不保存退出
:wq 保存退出
:!  强制
:q!    强制不保存退出,用于修改文件之后,不保存数据退出。
:wq!  强制保存退出,当文件的所有者或者 root 用户,对文件没有写权限的时候,强制写入数据使用。
​
# 快捷键保存推出
# shift zz

命令模式操作

移动光标

# 上下左右移动光标
上下左右移动光标 上、下、左、右方向键,或者 H、j、k、l
​
# 把光标移动到文件头或尾
gg  :移动到文件头
G   :移动到文件尾(shift+g)
​
# 移动到行首或行尾
0  :移动到行首
$  :移动到行尾
​
# 移动到指定行
:n   移动到第几行
#这里 n 是数字,准备移动到第几行,就用哪个数字。 ```

删除或剪切

## 删除字母
x   :删除单个字母
nx  :删除n个字母
​
## 删除整行或剪切
dd    :删除单行
ndd   :删除多行
:n1,n2d  删除指定范围的行
# 删除整行或多行,这是比较常用的删除方法。这里的 dd 快捷键既是删除,也是剪切。删除内容 放入了剪切板,如果不粘贴就是删除,如果粘贴就是剪切。
​
## 粘贴p   粘贴到光标后 P(大)  粘贴到光标前
## 从光标所在行删除到文件尾dG 从光标所在行删除到文件尾
#“d”是删除行,“G”是文件尾,连起来就是从光标所在行删除到文件尾。

复制

yy   :复制单行
nyy  :复制多行
#复制之后的粘贴,依然可以使用 p 键或 P(大)键 

撤销

u   :撤销
ctrl+r  :反撤销
​
#“u”键能一直撤销到文件打开时的状态,类似 Windows 下“ctrl+z”键的作用。
​
#“ctrl+r”能一直反撤销到最后一次操作状态,类似 Windows 下“ctrl+y”键的作用。 

替换

r  :替换光标所在处的字符
R  :从光标所在处开始替换字符,按ESC结束
# “r”键替换单一字符,不用进入输入模式,实际使用时,比进入输入模式删除后再修改,要方便。 

vim 配置文件

vim 支持更多的设置参数,可以通过“:set all”进行查看。设置参数都只是临时生效,一旦关闭文件再打开,又需要重新输入。如果想要永久生效,需要手工建立 vim 的配置文件“~/.vimrc”,把你需要的参数写入配置文件就永久生效了。

设置参数 含义
:set nu :set nonu 显示与取消行号
:syntax on :syntax off 是否依据语法显示相关的颜色帮助。在Vim中修改相关的配置文件或Shell脚本文件时(如前面示例的脚本/etc/init.d/sshd),默认会显示相应的颜色,用来帮助排错,如果觉得颜色产生了干扰,则可以取消此设置
:set hlsearch :set nohlsearch 设置是否将查找的字符串高亮显示。默认是set hlsearch高亮显示
:set ruler :set noruler 设置是否显示右下角的状态栏。默认是set ruler
:set showmode :set noshowmode 设置是否在左下角显示如“-INSERT-”之类的状态栏。默认是set showmode
:set list :set nolist 设置是否显示隐藏字符(Tab建用“I”表示,回车符用“$”表示)默认是nolist。如果用set list,类似于“cat -A 文件名”

vim支持更多的设置参数,可以通过“:set all” 进行查看。

这些设置参数都只是临时生效,一旦关闭文件再打开,又需要重新输入。如果想要

永久生效,需要手工建立vim的配置文件“~/. vimrc”,把你需要的参数写入配置文件就永久生效了。

注 : Windows下回车符在Linux中是用“^M$"符号显示,而不是“$”符。这样会导致Windows下编辑的程序脚本,无法在Linux中执行。这时可以通过命令“dos2unix",把Windows格式转为Linux格式,当然反过来“unix2dos"命令就是把Linux格式转为Windows格式。这两个命令默认没有安装,需要手工安装才能使用。

vim 使用技巧

在 vim 中导入其他文件内容或命令结果

导入其他文件内容

:r 文件名   把文件内容导入光标位置  可以把其他文件的内容导入到光标所在位置 

在 vim 中执行系统命令

:!命令    在 vim 中执行系统命令  这里只是在 vim 中执行系统命令,但并不把系统命令的结果写入到文件中。

导入命令结果

:r  !命令   在 vim 中执行系统命令,并把命令结果导入光标所在行  在 vim 中执行系统命令,并把命令结果导入光标所在行

设定快捷键

:map 快捷键 快捷键执行的命令   # 自定义快捷键  vim 允许自定义快捷键,常用的自定义快捷键如下:
:map ^_ I#<ESC>
# 按“ctrl+/”时,在行首加入注释
:map  ^B x
# 按“ctrl+b”时,删除光标字母(删除注释)
注意:^B 快捷键不能手工输入,需要执行 ctrl+V+B 来定义,或 ctrl+V ,然后 ctrl+B。 

字符替换

:ab 源字符 替换为字符
# 在 vim 编辑中,有时候需要频繁输入某一个长字符串(比如邮箱),这时使用字符串替换,能增 加输入效率,例如: :ab 123@163.com  当碰到“mymail”时,转变为邮箱

多文件打开

在 vim 中可以同时打开两个文件,只要执行如下命令:

~]# vim  -o  abc  bcd
~]# vim  -O  abc  bcd
#-o  小写 o 会上下分屏打开两个文件
#-O  大写 O 会左右分屏打开两个文件  这样可以同时打开两个文件,方便操作。
# 如果是“-o”上下打开两个文件,可以通过先按“ctrl+w”, 再按“上下箭头”的方式在两个文件之间切换。
# 如果是“-O”左右打开两个文件,可以通过先按“ctrl+w”,再按“左右箭头”的方式在两个文 件之间切换。

查找

/查找内容
# 从光标所在行向下查找 ?查找内容
# 从光标所在行向上搜索
n    下一个
N    上一个

替换

:1,10s/old/new/g
# 替换 1 到 10 行的所有 old 为 new :%s/old/new/g
# 替换整个文件的 old 为 new  替换字符串:1,10s/^/#/g
## 注释 1 到 10 行   #不同语言注释不一样。:1,10s/^#//g
# 取消注释 :1,10s/^/\/\//g
## 1 到 10 行,行首加入//
#因为/在vim命令中有特殊含义,所以要用反斜杠\进行转义:1,10s/^\/\///g
# 取消 1 到 10 行行首的//

十一.软件包安装

1.软件包分类

  • 源码包

  • 二进制包

软件包选择建议:

源码包:如果服务是给大量客户端提供访问的,建议使用源码包,源码包效率更高(LAMP)

RPM包:如果程序是给少量用户访问,或者本地使用的,建议RPM包,因为RPM包管理方便

rpm包是光盘中直接包含的,所以不需要用户单独安装下载;而源码包是通过官方网站下载的,如果需要使用,是需要单独下载的。

2.源码包

1)源码包什么样

直接由编程语言写成,没经过编译。类似于java的 .calss 文件,c的 .c文件。

~]#  vim  hello.c
#include <stdio.h> int main (void) {printf ("hello world\n");
}
​
~]# gcc -c hello.c
# - c 生成“ .o ”头文件。这里会生成 hello.o 头文件,但是不会生成执行文件
​
~]# gcc -o hello hello.o
# - o 生成执行文件,并制定执行文件名。这里生成的 hello 就是可执行文件
​
~]# ./hello
hello world
# 执行 hello 文件

2)源码包特点

源码包的优点:

  • 开源,如果有足够的能力,可以修改源代码

  • 可以自由选择所需的功能

  • 软件是编译安装,所以更加适合自己的系统,更加稳定也效率更高

  • 卸载方便

源码包有缺点:

  • 安装过程步骤较多,尤其安装较大的软件集合时(如 LAMP 环境搭建),容易出现错误

  • 编译过程时间较长,安装比二进制安装时间长 -因为是编译安装,安装过程中出现问题比较难以解决

3.二进制包

1)二进制包分类

DPKG 包:

是由 Debian Linux 所开发出来的包管理机制,通过 DPKG 包,Debian Linux 就可以进行软件包管理。主要应用在 Debian 和 unbuntu 中。

RPM 包:

是由 Red Hat 公司所开发的包管理系统。功能强大,安装、升级、查询和卸载 都非常简单和方便。目前很多 Linux 都在使用这种包管理方式,包括 Fedora、CentOS、 SuSE 等。

特点

RPM 包的优点:

  • 包管理系统简单,只通过几个命令就可以实现包的安装、升级、查询和卸载

  • 安装速度比源码包安装快的多 RPM 包的

缺点:

  • 经过编译,不再可以看到源代码

  • 功能选择不如源码包灵活

  • 依赖性。有时候复杂一点的软件包依赖于别的软件包才能安装,而别的软件包有依赖于另外的软件包。非常麻烦。

RPM包依赖

1)树形依赖 a---->b---->c

2)环形依赖 a---->b---->c---->a 以上两种情况,我们可以用命令一次将所需要的软件包全部安装,就不需要考虑依赖性问题。

3)函数库依赖 :a软件包依赖与另外软件包中的函数库或者模块,我们需要找到该模块或者该函数库对应的软件包。

可通过该网站查询Rpmfind mirror

2)RPM包的基本用法

1)rpm安装

1)rpm包的概述

• RedHat Package Manager

由红帽公司提出,RedHat、SUSE等系列采用

建立集中数据库,记录软件包安装/卸载等变化信息,分析软件包依赖关系

2)rpm包命名规则

~]# httpd-2.2.15-15.el6.centos.1.i686.rpm
#httpd 软件包名
#2.2.15 软件版本
#15  软件发布的次数
#el6  软件发行商。el6 是 RedHat 公司发布,适合 RHEL6.x(Red Hat Enterprise Linux)和 CentOS6.x 下使用 i686 适合的硬件平台。RPM 包可以在不同的硬件平台安装,选择适合不同 CPU 的软件版本,可以最大化的发挥 CPU 性能,所以出现了所谓的 i386(386 以上计算机都可以安装)、i586(586 以上的计算机都可以安装)、i686(奔腾 II 以上计算机都可以安装,目前所有的 CPU 都是 奔腾 II 以上,所以这个软件版本居多)、x86_64(64 位 CPU 可以安装)和 noarch(没有硬 件限制)等文件名了。
#rpm  包的扩展名 Linux 下文件不是靠扩展名区分文件类型,也就是 Linux 中扩展 名没有任何含义。可是这里怎么又出现了扩展名呢?原因很简单,如果我不把 RPM 的扩展名 叫做“.rpm”,管理员很难知道这是一个 RPM 包,当然也就无法正确安装了。也就是说如果 RPM 包不用“.rpm”作为扩展名,系统可以正确识别没有问题,可是管理员很难识别这是个什么样的软件。 

包全名:如果操作的是未安装软件包,则使用包全名,而且需要注意绝对路径 包名:如果操作的是已经安装的软件包,则使用包名即可,系统会生产 RPM 包的数据库(/var/lib/rpm/)。

3)rpm包手工命令安装

默认安装位置

目录 作用
/etc/,/etc/软件名/ 配置文件目录
/usr/sbin/,/sbin, /usr/bin/ 可执行命令目录
/usr/lib/ 程序使用的函数库保存位置
/usr/share/doc/ 软件基本使用手册保存位置
/usr/lib/,/usr/share/man 程序文档,帮助文档保存位置

4)安装命令

rpm –ivh 包全名 # 注意一定是包全名。如果跟包全名的命令 要注意路径,因为软件包在光盘当中。
选项:
-i   # install 安装(install)
-v   # 显示更详细的信息(verbose)
-h   # 打印#显示安装进度(hash)
--nodeps  # 不检测依赖性安装。软件时会检测依赖性,确定所需的底层软件是否安装。 如果没有安装则会报错。不管依赖性,强行安装。这样不检测依赖性安装的软件基本是不能使用的,所以不建议这样做。
--replacefiles # 替换文件安装。如果安装软件包,可是包中部分文件已经存在,那么 正常安装时候,会报错“某个文件已经存在”从而导致软件无法安装,使用这个选项可 以忽视这个报错,而覆盖安装。
--replacepkgs # 替换软件包安装。如果软件包已经安装,此选项可以把软件包重复安装一遍。
--force  # 强制安装。不管是否已经安装,都重新安装。就是—replacefiles 和 —replacepkgs 的综合。
--test # 测试安装。不会实际安装,只是检测一下依赖性。
--prefix # 指定安装路径。为安装软件指定安装路径,而不使用默认安装路径。注意: 如果指定了安装路径,软件没有安装到系统默认路径中的话,系统会找不到这些安装的软件,需要进行手工配置才能被系统识别。所以 rpm 包我们一般都采用默认路径安装。源码包则必须指定安装目录

5)服务启动

# 第一种启动方式
~]# service 服务名 start|stop|restart|status
参数:
start:   启动服务
stop:    停止服务
restart:  重启服务
status:  服务状态
​
# 第二种启动方式如httpd(标准启动方式)
~]# /etc/rc.d/init.d/httpd  start|stop|restart|status 

2)RPM 包升级

~]#  rpm –Uvh 包全名
选项:
-U(大写) 升级安装,如果没有安装过,系统直接安装。如果安装过的版本较旧,则升级到新版本(upgrade)
​
~]#  rpm –Fvh 包全名
选项:
-F(大写)  升级安装,如果没有安装过,则不会安装。必须安装有较旧版本,才能升级(freshen)
​

3)卸载

~]# rpm  -e  包名
选项:
--nodeps 不检查依赖性
-e   卸载
注:卸载也是有依赖的

4)查询

1)查询软件包是否安装 可以查询软件包是否安装

~]#  rpm –q 包名
选项:
-q: 查询(query)

2)查询系统中的所有安装软件包 可以查询 Linux 系统中所有已经安装的软件包

~]# rpm -qa
选项:
-a:所有(all)

3)查询软件包的详细信息 可以查询已经安装的某个软件包的详细信息

~]#  rpm –qi 包名
选项:
-i: 查询软件信息(information)

查询还没有安装的软件包的详细信

~]#  rpm –qip 包全名
选项:
-p: 查询没有安装的软件包(package)

4)查询软件包中的文件列表 可以查询已经安装的软件包中的文件列表和安装的完整目录

~]#  rpm –ql 包名
选项:
-l: 列出软件包中所有的文件列表和软件所安装的目录(list) 

查询还没有安装的软件包中的文件列表和打算安装的位置

~]#  rpm –qlp 包全名
选项:
-p: 查询没有安装的软件包信息(package) 

5)查询系统文件属于哪个 RPM 包

~]#  rpm –qf 系统文件名
选项:
-f: 查询系统文件属于哪个软件包(file)

6)查询软件包所依赖的软件包 查询系统中和已经安装的软件包有依赖关系的软件包

~]# rpm –qR 包名
选项:
-R: 查询软件包的依赖性(requires)
可以查询没有安装的软件包的依赖性吗?加“-p”选项即可。例如,查看一下还没有安装的 httpd 软件包的依赖包,可以执行如下命令:
[root@localhost ~]# rpm -qpR /mnt/cdrom/Packages/httpd-2.2.15-53.el6.centos.x86_64

5)验证

1)基本命令

~]# rpm –Va
选项:
-Va 校验本机已经安装的所有软件包
~]# rpm –V 已安装的包名
选项:
-V 校验指定 RPM 包中的文件(verify)
~]# rpm –Vf 系统文件名
选项:
-Vf 校验某个系统文件是否被修改

2)验证举例

~]# rpm -V httpd
S.5....T.      c   /etc/httpd/conf/httpd.conf
# 有输出说明改变了,反之没改变
验证内容   文件类型  最后是文件名。
那么验证内容中的 8 个信息的具体内容 如下:
S 文件大小是否改变
M 文件的类型或文件的权限(rwx)是否被改变
5 文件 MD5 校验和是否改变(可以看成文件内容是否改变)
D 设备的主从代码是否改变
L 文件路径是否改变
U 文件的属主(所有者)是否改变
G 文件的属组是否改变
T 文件的修改时间是否改变
apache 配置文件的文件类型是 c,那么还有哪些文件类型呢?
c 配置文件(config file)
d 普通文档(documentation)
g “鬼”文件(ghost file),很少见,就是该文件不应该被这个 RPM 包
l 授权文件(license file)
r 描述文件(read me)

6)数字证书

上面的校验方法只能对已经安装的 RPM 包中的文件进行校验,但是如果 RPM 包本身就被动过手脚, 那么校验就不能解决问题了。 我们就必须使用数字证书验证了。首先必须找到原厂的公钥文件,然后进行安装 ,再安装 RPM 包是。 用rpm命令安装软件时会去提取 RPM 包中的证书信息,然后和本机安装的原厂证书进行验证,如果验证通过,则允许安装;如果验证不通过,则不允许安装并警告。 1)数字证书位置

~]# ll  /mnt/cdrom/RPM-GPG-KEY-CentOS-6
-r--r--r-- 2 root root 1706 11月 27 2013 /mnt/cdrom/RPM-GPG-KEY-CentOS-6

2)数字证书导入

~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
选项:
--import 导入数字证书#查询已经安装的证书
~]# rpm -qa | grep  gpg-pubkey
gpg-pubkey-c105b9de-4e0fd3a3

7)RPM包中文件的提取

有时候我们会将某些软件的文件误删,所以我们可以通过命令提取特定文件。 1)使用命令 rpm2cpio+ cpio

~]# rpm2cpio 包全名 | cpio -iduv .文件绝对路径
rpm2cpio  将 rpm 包转换为 cpio 格式的命令
cpio      是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件
cpio还原时,命令解释。
-i:copy-in 模式,还原
-v:显示还原过程
-c:使用较新的 portable format 存储方式
-d:还原时自动新建目录
-u:自动使用较新的文件覆盖较旧的文件 

2)示例、假如我们不小心 将位于 /bin/find 删掉了。我们可以通过以下步骤恢复

# 先查出该命令对应的软件包名
~]# rpm -qf /bin/find
findutils-4.4.2-9.el6.x86_64# 提取文件到当前文件下
~]# rpm2cpio /mnt/cdrom/Packages/findutils-4.4.2-9.el6.x86_64.rpm | cpio -iduv  ./bin/find# 将find命令移动到/bin目录下
[root@love2 ~]# mv bin/find  /bin/

3)rpm包在线安装(yum安装)

1)yum源文件解析

yum 源配置文件保存在/etc/yum.repos.d/目录中,文件的扩展名一定是“.repo”。也就是说, yum 源配置文件只要扩展名是“.repo”就会生效。

~]# ls /etc/yum.repos.d/
CentOS-Base.repo  CentOS-Epel.repo  epel.repo  epel-testing.repo  offline-yum.repo
# 网络yum可以直接用,但光盘yum源,要将.repo结尾的文件移动了一下。
[base]
name=Qcloud centos extras - $basearch
gpgcheck=1
gpgkey=http://mirrors.tencentyun.com/centos/RPM-GPG-KEY-CentOS-7
enabled=1
baseurl=http://mirrors.tencentyun.com/centos/$releasever/extras/$basearch/[base]:容器名称,一定要放在[]中
name:容器说明,可以自己随便写。
mirrorlist:镜像站点,这个可以注释掉。
baseurl:我们的 yum 源服务器的地址。默认是 CentOS 官方的 yum 源服务器,是可以使用的。 如果你觉得慢,则可以改成你喜欢的 yum 源地址。
enabled:此容器是否生效,如果不写或写成 enabled=1 则表示此容器生效,写成 enabled=0 则表示此容器不生效。
gpgcheck:如果为 1 则表示 RPM 的数字证书生效;如果为 0 则表示 RPM 的数字证书不生效
gpgkey:数字证书的公钥文件保存位置。不用修改。

2)搭建本地光盘yum源

第一步:放入 CentOS 安装光盘,并挂载光盘到指定位置

~]# mkdir /mnt/cdrom # 创建 cdrom 目录,作为光盘的挂载点
~]# mount /dev/sr0  /mnt/cdrom/ #挂载 

第二步:修改其他几个 yum 源配置文件的扩展名,让它们失效,因为只有扩展名是“*.repo”的 文件才能作为 yum 源配置文件。当然你也可以将不需要的移动到另外的目录。

第三步:修改光盘 yum 源配置文件 CentOS-Media.repo,参照以下方法修改:

~]# vim  CentOS-Media.repo
[c6-media]
name=CentOS-$releasever - Media
baseurl=file:///mnt/cdrom/
#       file:///media/cdrom/
#       file:///media/cdrecorder/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

第四步 清除原先yum缓存,并且建立新的缓存

yum clean all && yum makecache

3)网络yum

~]# vim /etc/yum.repo.d/other.repo
[other]
name=liunx
baseurl=http://192.168.4.7/other/
enabled=1
gpgcheck=0
# 在清除缓存,重新刷新
~]# yum clean all
~]# yum repolist

4)自定义yum

# 去官网下载安装包(rpm)同一放到一个目录下
~]# reaterepo '此目录下的包' # 生成仓库清单文件
# 创建yum文件
~]# vim /etc/yum.repos.d/mydvd.repo
[rpm] # 唯一标识
name=myrpm
baseurl=file:///tools/other # 指定Yum仓库的路径
enabled=1
gpgcheck=0

5)开机自启

~]# vim /etc/fstab
挂载设备 挂载点 格式( blkid 看) 参数 0 0# 作用:自动解决依赖关系安装软件
# 服务:为客户端自动解决依赖关系安
# 装软件
# 服务端 (本机):仓库数据文件清单:(repodat)
# 软件包文件:Packages

4.yum命令

1)查询

# 查询 yum 源服务器上所有可安装的软件包列表
~]# yum list# 查询 yum 源服务器中是否包含某个软件包。
~]# yum list bind
已加载插件:fastestmirror, security
Loading mirror speeds from cached hostfile
可安装的软件包
bind.x86_64                                              32:9.8.2-0.47.rc1.el6                                               c6-media# 搜索 yum 源服务器上所有和关键字相关的软件包
~]# yum search apache   #搜索包含有apache关键字软件包
已加载插件:fastestmirror, security
Loading mirror speeds from cached hostfile
======================================================== N/S Matched: apache ========================================================
ant-apache-bcel.x86_64 : Optional apache bcel tasks for ant
ant-apache-bsf.x86_64 : Optional apache bsf tasks for ant# 查询指定软件包的信息
~]# yum info bind
已加载插件:fastestmirror, security
Loading mirror speeds from cached hostfile
可安装的软件包
Name        : bind
Arch        : x86_64
Epoch       : 32
Version     : 9.8.2
Release     : 0.47.rc1.el6
Size        : 4.0 M
Repo        : c6-media
...

2)安装

~]# yum -y install 包名
选项:
install  安装
-y   自动回答 yes。如果不加-y,那么每个安装的软件都需要手工回答 yes

3)升级

~]# yum -y update 包名
# 升级指定的软件包
选项:  update:  升级
-y:   自动回答 yes~]# yum -y update
# 升级本机所有软件包

4)卸载

~]# yum remove 包名
# 卸载指定的软件包

5)yum组管理命令

1)查询可以安装的软件组

~]# yum grouplist
# 列出所有可用的软件组列表

2)查询软件组内包含的软件

~]# yum groupinfo 软件组名
# 列出软件组中包含的软件
例:
~]# yum groupinfo Emacs
已加载插件:fastestmirror, security
设置组进程
Loading mirror speeds from cached hostfile组:Emacs
描述:GNU Emacs 可扩展、可自定义的文本编辑器。
必要的软件包:
emacs
可选的软件包:
ctags-etags
emacs-auctex
emacs-gnuplot
emacs-nox

3)安装软件组

~]# yum groupinstall 软件组名
# 安装指定软件组,组名可以由 grouplist 查询出来 

4)移除软件组

~]# yum groupremove 软件组名
# 卸载指定软件组

4.源码包的安装与管理。

1)软件包的选择

  • 如果软件包是给大量客户提供访问,建议使用源码包安装,如LAMP环境搭建,因为源码包效率更高。

  • 如果软件包是给Linux底层使用,或只给少量客户访问,建议使用rpm包安装,因为rpm包简单。

  • 在如今硬件水平的不断提高,这两种软件包安装的效果差距越来越小,还是看自己的选择,追求速度的话可以选择rpm包,更多的功能和扩展可以选择源码包安装。

2)安装过程

(1)下载软件包。 (2)解压缩。 (3)进入解压目录。 (4)./configure 编译前准备 这一步主要有三个作用:

  • 在安装之前需要检测系统环境是否符合安装要求。

  • 定义需要的功能选项。“./configure”支持的功能选项较多,可以执行“./configure --help” 命令查询其支持的功能。一般都会通过“./configure --prefix=安装路径”来指定安装路径。

  • 把系统环境的检测结果和定义好的功能选项写入 Makefile 文件,后续的编译和安装需要依赖这个文件的内容。 需要注意的是,configure 不是系统命令,而是源码包软件自带的一个脚本程序,所以必须采用 “./configure”方式执行(“./”代表在当前目录下)。

(5)make 编译

make 会调用 gcc 编译器,并读取 Makefile 文件中的信息进行系统软件编译。编译的目的就是把 源码程序转变为能被 Linux 识别的可执行文件,这些可执行文件保存在当前目录下。编译过程较为耗时,需要有足够的耐心。 (6)make clean:清空编译内容(非必需步骤)。

如果在“./configure”或“make”编译中报错,那么我们在重新执行命令前一定要记得执行 make clean 命令,它会清空 Makefile 文件或编译产生的“.o”头文件。 (7)make install: 编译安装

这才是真正的安装过程,一般会写清楚程序的安装位置。如果忘记指定安装目录,则可以把这个 命令的执行过程保存下来,以备将来删除使用。

3)删除

源码包没有删除命令,如果需要删除,直接删除安装目录即可

4)打补丁

我们可以拿已经修改改过的文件与未修改过的文件进行比较,生成补丁文件,如果不小心误删除文件,可以使用补丁文件进行恢复。

diff命令介绍

~]# diff 选项 old new # 比较 old 和 new 文件的不同
选项:
-a  将任何文档当做文本文档处理
-b  忽略空格造成的不同
-B  忽略空白行造成的不同
-I  忽略大小写造成的不同
-N  当比较两个目录时,如果某个文件只在一个目录中,则在另一个目录中视作空文件
-r  当比较目录时,递归比较子目录
-u  使用同一的输出格式

举例:

#创建测试目录
~]# mkdir /test#生成两个文件,new.txt 比 old.txt 多一行内容。
~]# echo  "123" > old.txt
~]# cat old.txt > new.txt
~]# echo "456" >> new.txt#使用diff命令生成补丁文件
~]# diff -auNr old.txt new.txt > txt.patch#查看txt.patch,如下
~]# cat txt.patch
--- old.txt 2019-11-30 09:40:57.191124425 +0800
+++ new.txt  2019-11-30 09:41:11.814004591 +0800
@@ -1 +1,2 @@
123
+456

此时我们已经生成了补丁文件,若假如我们不小心删除了new.txt文件,我们可以用patch命令恢复,由于我们使用的是相对路径生成的补丁文件,所以我们需要在刚才的test目录下执行patch命令。

#切换目录
~]# cd /text
#打补丁,此时将old.txt文件内容恢复到与new.txt一样
~]# patch  -pn < txt.patch 选项:
-pn n为数字。代表按照补丁中的路径,指定更新问件路径
#查看old.txt内容
~]# cat old.txt
123
456

5.脚本安装程序

1.Webmin 简介

  Webmin是目前功能最强大的基于Web的Unix系统管理工具。管理员通过浏览器 访问Webmin的各种管理功能并完成相应的管理动作。目前Webmin支持绝大多数的Unix系统,这些系统除了各种版本的linux以为还包 括:AIX、HPUX、Solaris、Unixware、Irix和FreeBSD等。

Webmin 让您能够在远程使用支持 HTTPS (SSL 上的 HTTP)协议的 Web 浏览器通过 Web 界面管理您的主机。这在保证了安全性的前提下提供了简单深入的远程管理。这使得 Webmin 对系统管理员非常理想,因为所有主流平台都有满足甚至超出上述需求的 Web 浏览器。而且,Webmin 有其自己的“Web 服务器”,因此不需要运行第三方软件(比如 Web服务器)。万事具备。Webmin 的模块化架构允许您在需要时编写您自己的配置模块

2.下载Webmin的安装文件,

命令是:

~]# wget http://prdownloads.sourceforge.net/webadmin/webmin-1.670.tar.gz

到官网下载也可,我喜欢用wget命令来下载。

3.解压缩文件,命令是:

~]# tar -zxvf webmin-1.670.tar.gz

4.进入webmin的解压缩目录,然后运行setup.sh,命令为:

~]# ./setup.sh

5.一路回车即可安装完成,

最后有一个地方需要设置用户名和密码的地方,用户名默认是admin,可以自己修改,下面的密码一定要输入自己容易记忆的密码。

详细操作如下:

Config file directory[/etc/webmin]: 回车    //直接回车表示选择默认安装路径,

也可下其它路径,然后接回车键

Log file directory[/var/webmin]: 回车    //同上,表示日志文件夹存放路径
Web server port (default 10000):回车       //指定Web访问的端口,默认端口为10000Login name (default admin)://在这里输入登录用户名,默认是“admin”Login password: 输入密码Password again: 再次输入密码Start Webmin at boot time (y/n):输入”y”

6.等看到安装完成的提示之后,

在浏览器中输入

http://ip:10000 或 http://localhost:10000/ ,

然后回车,如果看到一个登陆界面,就说明webmin已经安装成功了。至此表明,安装在Linux系统下的Webmin可以正常工作了。

正确输入用户名及口令(默认只有root账号可以登陆),就可以对系统管理了。

7.刚安装时是英文界面,登录webmin系统后,

依次打开

Webmin →Webmin Configuration →Language,在 Display in Language处选择Simplified Chinese (ZH_CN),

然后再点击”Change Language”重新进入webmin系统时就会显示中文了。

十二.用户的管理

1.用户相关文件

1)用户信息文件

/etc/passwd

注:系统以ID号来识别用户的

root:x:0:0:root:/root:/bin/bash      

第一列: 用户名 第二列: 密码位(标记) 第三列: 用户 ID

  • 0 超级用户 UID。如果用户 UID 为 0,代表这个账号是管理员账号。那 Linux 中 如何把普通用户升级成为管理员呢?就是把其他用户的 UID 修改为 0 就可以了。

  • 1-499 系统用户(伪用户)UID。这些 UID 账号是系统保留给系统用户的 UID,也就是 说 UID 是 1-499 范围内的用户是不能登录系统的,而是用来运行系统或服务的。其中 1-99 是系统保留的账号,系统自动创建。100-499 是预留给用户创建系统账号的。

  • 500-65535 普通用户 UID。建立的普通用户 UID 从 500 开始,最大到 65535。这些用户足够使用了,但是如果不够也不用害怕,2.6.x 内核以后的 Linux 系统用户 UID 已经 可以支持 2^32这么多了。

第四列:组 ID GID 添加用户时,如果不指定用户所属的初始组,那么会建立和用户名相同的组 第五列: 用户说明 第六列: 用户家目录 ~ 第七列: 登录 shell /bin/bash

注:默认用户(系统用户)不能删除,删除责对应服务起不来

2) 密码文件

/etc/shadow

root(1):$1$KhnBfFyK$0G/sKHf50fT9fEHA9zr2f0(2):(3):0(4):99999(5):7(6):(7):(8):(9)

第一列: 用户名

第二列: 加密密码 我们也可以在密码前人为的加入“!”或“*”改变加密值让密码暂时失效,使这个用户无法登陆,达到暂时禁止用户登录的效果。

注意:所有伪用户的密码都是“!!”或“*”,代表没有密码是不能登录的。当然我新创建的用户如果不设定密码,它的密码项也是“!!”,代表这个用户没有密码,不能登录。

第三列: 密码最近更改时间, 从1970 年 1 月 1 日算起,按天来算,我的为空,代表创建后就没改过密码。

# 日期转换成时间戳
~]# echo $(( $(date --date="2022-01-01" +%s)/86400+1 ))
18993
​
# 时间戳转换成日期
~]# date -d "1970-01-01 18993 days"

第四列: 两次密码的修改间隔时间,为0代表没有限制。(和第 3 字段相比)

第五例: 密码有效期(和第 3 字段相比)

第六列: 密码修改到期前的警告天数(和第 5 字段相比)

第七列: 密码过期后的宽限天数(和第 5 字段相比)

第八列: 密码失效时间,这里同样要写时间戳,也就是用 1970 年 1 月 1 日进行时间换算。如果超过了失效时间,就算密码没有过期,用户也就失效无法使用了

第九列: 保留

3)组信息文件

/etc/group

root:x:0:root 

第一列: 组名

第二列: 组密码位(不建议添加密码)

第三列: GID

第四列: 此组中支持的其他用户.附加组是此组的用户

  • 初始组:每个用户初始组只能有一个,初始组只能有一个,一般都是和用户名相同的组作为 初始组

  • 附加组:每个用户可以属于多个附加组。要把用户加入组,都是加入附加组

4)组密码文件

/etc/gshadow

如果我给用户组设定了组管理员,并给该用户组设定了组密码,组密码就保存在这个文件当中。 组管理员就可以利用这个密码管理这个用户组了。

5)用户的家目录

root用户家目录为 /root

普通用户家目录为 /home/用户名

6)用户邮箱目录

这个邮箱在/var/spool/mail 目录当中,

例如 user1 用户的邮箱就是/var/spool/mail/user1 文 件

7)用户模板目录

/etc/skel/,创建新用户时,用户家目录内容跟该文件夹内容一致。

~]# ~/.bash_profile
# 每次登录系统时执行,定义初始变量值
​
~]# ~/.bashrc
# 每次进入新的Bash环境时执行(开启新的终端)
​
~]# /root/.bashrc
# 定义当前永久别名
​
~]# /etc/bashrc
# 全局配置文件,影响全体用户(开启新的终端)

2.用户管理命令

原则:Linux一个用户必须至少属于一个组

唯一标识:UID(编号从0开始的编号,默认最大60000)管理员root的UID:永远为0;普通用户的UID:默认从1000开始

1 )添加用户

手工删除用户

手工删除用户试验:手工删除,如果可以正常建立用户,证明用户删除干净。

# 创建一个用户会在一下文件中生成信息
# /etc/passwd  (用户)
# /etc/shadow (用户密码)
#/etc/group    (组)
#/etc/gshadow  (组密码)
#/home/        (用户家目录) /var/spool/mail/  (用户邮箱)
# 创建用户
~]# useradd ceshi
​
# 查看文件中的用户信息
~]#grep ceshi /etc/passwd  /etc/shadow /etc/group /etc/gshadow
/etc/passwd:ceshi:x:1000:1000::/home/ceshi:/bin/bash
/etc/shadow:ceshi:!!:18993:0:99999:7:::
/etc/group:ceshi:x:1000:
/etc/gshadow:ceshi:!::
~]# ls /home/ /var/spool/mail/
/home/:
ceshi
​
/var/spool/mail/:
ceshi
​
# 删除文件中的用户信息与家目录,和邮件文件
~]# vim -O /etc/passwd  /etc/shadow /etc/group /etc/gshadow
dd 删除ceshi
:wq! 强制保存退出
~]# rm -rf /home/ceshi /var/spool/mail/ceshi
​
# 测试是否删除(或useradd直接创建成功则成功)
~]# su - ceshi
su: user ceshi does not exist

useradd 命令

~]# useradd 选项 用户名
选项:
-u 550 指定 UID
-g 组名 指定初始组 不要手工指定
-G 组名 指定附加组,把当前用户添加到某一个用户的附加组中。
-c 说明 添加说明
-d 目录 手工指定家目录,目录不需要事先建立
-s 指定shell,如 -s /bin/bash
​
# 直接创建用户
~]# useradd ceshi
# 注:如果时伪用户则不需要创建密码,反之则需创建密码才能登录

useradd 默认值

useradd 添加用户时参考的默认值文件主要有两个,分别是/etc/default/useradd 和 /etc/login.defs

1)/etc/default/useradd文件

~]# vim  /etc/default/useradd
# useradd defaults file
GROUP=100 #这个选项是建立用户的默认组,也就是说添加每个用户时,用户的初始组就是 GID 为 100 的这个用户组。
HOME=/home #用户家目录
INACTIVE=-1 #这个选项就是密码过期后的宽限天数,也就是/etc/shadow 文件的第七个字段。如果是天数,比 如 10 代表密码过期后 10 天后失效;如果是 0,代表密码过期后立即失效;如果是-1,则代表密码永远不会失效。
EXPIRE=  #这个选项是密码失效时间,也就是/etc/shadow 文件的第八个字段。也就说用户到达这个日期后 就会直接失效。当然这里也是使用时间戳来表示日期的。默认值是空,所以所有新建用户没有失效时间,永久有效。
SHELL=/bin/bash   # 用户启动程序
SKEL=/etc/skel    # 用户模板位置
CREATE_MAIL_SPOOL=yes  #默认创建邮箱

2)/etc/login.defs

# 这个文件有些注释,把注释 删除掉,文件内容就变成下面这个样子了
MAIL_DIR        /var/spool/mail PASS_MAX_DAYS   99999    PASS_MIN_DAYS   0     PASS_MIN_LEN   5    PASS_WARN_AGE   7
# 密码最长有效期            最小有效期               最小长度              最大长度UID_MIN        500        UID_MAX           60000
# 普通最小用户id            普通最大用户idGID_MIN        500        GID_MAX           60000
#普通最小组id               普通最大组idCREATE_HOME     yes
# 是否自动创建用户家目录 UMASK           077
# 这行指定的是建立的用户家目录的默认权限 USERGROUPS_ENAB yes
# 这行指定的是使用命令 userdel 删除用户时,是否删除用户的初始组,默认是删除ENCRYPT_METHOD SHA512
# 密码加密方式

2)设定密码

passwd命令

设置密码与修改自身密码一致

注:root可以修改任意用户的密码,而其他用户只能修改自己的

# 直接执行passwd,再输入两次密码就行。两次密码必须一致(#交互式设置)
~]# useradd ceshi
~]# passwd ceshi
Changing password for user ceshi.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: -l :锁定用户,仅root用户可用
-u :解锁,仅root用户可用
--stdin: 可以管道符输出的数据作为用户的密码,主要在批量用户是使用# 示例
~]# ]# passwd -l ceshi
Locking password for user ceshi.
passwd: Success
# 与直接进入配置文件修改一致
~]# cat /etc/shadow
....
ceshi:!!$1$4Y4TYBX6$BXdlIkv0lZCAGXhwsNOh71:18994:0:99999:7:::~]# echo "123" | passwd --stdin ceshi
Changing password for user ceshi.
passwd: all authentication tokens updated successfully.# 用户登录即修改密码
~]# chage -d 0 lamp
# 把密码修改日期归零(shadow第3字段)

3 用户信息修改命令

~]#usermod [选项] 用户名
选项:
-u UID:  修改用户的 UID
-d 家目录:  修改用户的家目录。家目录必须写绝对路径
-c 用户说明: 修改用户的说明信息,就是/etc/passwd 文件的第五个字段
-g 组名:  修改用户的初始组,就是/etc/passwd 文件的第四个字段
-G 组名:  修改用户的附加组,其实就是把用户加入其他用户组
-s shell:  修改用户的登录 Shell。默认是/bin/bash
-e 日期:  修改用户的失效日期,格式为“YYYY-MM-DD”。/etc/passwd文件的第八个字段
-L:   临时锁定用户(Lock)
-U:   解锁用户(Unlock)
-l: 改名     格式    usermod -l newname oldname
~]# usermod -l 新名 旧名
# 注:linux不建议修改用户名,建议删除用户在创建用户,因为用户修改了但组名及等一些配置是不会改的,及容易把自己绕晕

4 删除用户

~]# userdel [-r] 用户名
选项:
-r: 在删除用户的同时删除用户的家目录
# 注:不加-r则不会删除家目录文件

5 切换用户身份与查看用户

~]# su [选项] 用户名
选项:
-:       选项只使用“-”代表连带用户的环境变量一起切换
-c 命令: 仅执行一次命令,而不切换用户身份
# 查看是否存在该用户
~]# id 用户# 查看当前用户
~]# whoami

6.组管理命令

作用:方便管理用户

唯一标识:GID(编号从0开始的编号,默认最大60000)组账户的分类:基本组:系统创建与用户同名附加组(从属组):由管理员创建,由管理员进行加入

1 )添加用户组命令

groupadd

~]# groupadd [选项] 组名
选项:
-g GID: 指定组 ID 

2 )删除用户组

groupdel

~]#groupdel 组名

3 )把用户添加进组或从组中删除

gpasswd

~]# gpasswd [选项] 组名
选项:
-a 用户名: 把用户加入组
-d 用户名: 把用户从组中删除
-M: 定义组成员用户列表,可设置多个
-A: 定义组管理员列表(把某个用户加入到某个组里当管理)
# 例如:把用户love2添加到love1组中。与usermod类似记一个就好
~]# gpasswd -a love2 love1
Adding user love2 to group love1

4)改变有效组

newgrp

更改当前用户的有效组

  • 举个例子,我们已经有了普通用户 user1,默认会建立 user1 用户组,user1 组是 user1 用户的初始组。我们再把 user1 用户加入 group1 组,那么 group1 组就是 user1 用户的附加组。当 user1 用 户创建文件test1时,test1文件的属组是user1组,因为user1组是user1用户的有效组。通过newgrp 命令就可以把 user1 用户的有效组变成 group1 组,当 user1 用户创建文件 test2 时,就会发现 test2 文件的属组就是 group1 组。 如下

~]# groupadd group1 # 添加组 group1
~]# gpasswd -a user1 group1 # 把 user1 用户加入 group1 组
Adding user user1 to group group1  ~]# su – user1 # 切换成 user1 身份
~]$ touch test1 # 创建文件 test1
~]$ ll test1
-rw-rw-r-- 1 user1 user1 0 1 月  14 05:43 test1 #test1 文件的默认属组是 user1 组 ~]$ newgrp group1 # 切换 user1 用户的有效组为group1组
~]$ touch test2 # 创建文件 test2
~]$ ll test2
-rw-r--r-- 1 user1 group1 0 1 月  14 05:44 test2 #test2 文件的默认属组是 group1 组
#其实 newgrp 就是切换用户的组身份。

7.设置账户有效期。

1)chage命令的语法格式:

#查看账户信息
chage -l 账户名称#修改账户有效期
chage -E  时间  账户名称

2)chage命令示例

## 测试失效
#创建账户
~]# useradd zhangsan
#设置密码
~]# passwd zhangsan
设置账户过期时间
~]# chage-E 2017-12-31 zhangsan
# 尝试以用户zhangsan重新登录,输入正确的用户名、密码后直接闪退,返回登录页,说明此帐号已失效。

测试是否设置时间成功

# 重设用户zhangsan的属性,将失效时间设为2019-12-31
~]chage -E 2019-12-31 zhangsan
#查看账户年龄信息
~]# chage -l zhangsan
Last password change :May 15,2017
Password expires     :never
Password inactive    :never
Account expires      :Dec
31,2019
Minimum number of days between password change:0
Maximum number of days between password change:99999
Number of days of warning before password expires:7

重设用户zhangsan的属性,将失效时间设为永不过期(数字1为永不过期)

~]# chage -E -1 zhangsan

定义默认有效期(/etc/login.defs这个配置文件,决定了账户密码的默认有效期)

~]# cat /etc/login.defs
PASS_MAX_DAYS   99999 #密码最长有效期
PASS_MIN_DAYS   0     #密码最短有效期(root可以随便改,0:当天随便改,1:一天之后才能改)
PASS_MIN_LEN    5     #密码最短长度
PASS_WARN_AGE   7     #密码过期前几天提示警告信息
UID_MIN         1000  #UID最小值
UID_MAX         60000 #UID最大值

临时锁定用户zhangsan的账户,使其无法登录,验证效果后解除锁定

## 锁定用户账号
#使用passwd或usermod命令将用户zhangsan的账户锁定。
~]# passwd -l zhangsan #锁定用户账号(lock)
passwd:                # 输入密码无法登录
Login incorrect#查看状态(status)
~]# passwd -S zhangsan
zhangsan LK 2018-02-22 0 99999 7 -1 (密码已被锁定)# 解除对用户zhangsan的锁定
~]# passwd -u zhangsan  # 解锁用户账号(unlock)
passwd:                  #操作成功#查看状态
~]# passwd -S zhangsan
zhangsan PS 2018-08-14 0 99999 7 -1  (密码已设置,使用SHA512加密)

十三.特殊权限管理

1.ACL 权限

acl访问策略作用

–能够对个别用户、个别组设置独立的权限

–大多数挂载的分机3/4、断续器文件系统默认已支持

如果我们只想要某一用户对文件或者有权限,可以使用acl权限。

1)查看acl是否开启

# 先查看哪块盘是数据盘(也就是挂载/分区的盘)
~]# df -h
.......
/dev/vda1        99G   47G   48G  50% /
.......
​
# 查看是否开启acl
~]# dumpe2fs -h /dev/vda1
......
Default mount options:    user_xattr acl
# alc默认时开启的
......
​
# dumpe2fs 查看指定分区详细文件系统信息的命令
# 选项:-h: 仅显示超级块中信息,而不显示磁盘块组的详细信息
​
# 如果没有开启,手工开启分区的 ACL 权限
~]# mount -o remount,acl / # 重新挂载根分区,并挂载加入 acl 权限
​
# 也可以通过修改/etc/fstab 文件,永久开启 ACL 权限
~]# vi /etc/fstab
/dev/mapper/VolGroup-lv_root /                       ext4    defaults,acl        1 1
# 加入 acl
​
~]# mount -o remount /     #重新挂载 / 分区

2)ACL 基本命令

getfacl

查看文件是否有acl权限

格式: getfacl 文件名 查询文件的 ACL 权限

~]# getfacl /ceshi
# file: ceshi      # 文件名
# owner: root      # 所属主
# group: root      # 所属组
user::rwx          # 所属主权限
group::r-x         # 所属组权限
other::r-x         # 其他人权限

setfacl

设置acl权限命令

格式: setfacl 选项 文件名 设定 ACL 权限

# 选项:
-m       设定 ACL 权限
-b       删除 ACL 权限
-R       只能对目录使用,递归赋予权限
-x       删除单个用户的 ACL 权限
​
# acl策略-黑名单的使用用法:
~]# setfacl -m  u:用户名:权限 文件名(单独拒绝某些用户)
~]# setfacl -m  g:组名:权限   文件名
~]# setfacl -x  u:用户名   文件名~]# setfacl -m u:love2:rx /root
## 示例
# 创建文件与用户并设置密码
~]# mkdir /ceshi && useradd ceshi
useradd: user 'ceshi' already exists
~]# passwd ceshi
Changing password for user ceshi.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
​
# 创建文件
~]# cd /ceshi && touch ceshi1
​
# 查看权限
~]# getfacl /ceshi
# file: ceshi
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
​
# 设置权限并查看
~]# setfacl -m u:ceshi:5 ceshi
~]# ll -d ceshi
drwxr-xr-x+ 2 root root 4096 Jan  3 15:53 ceshi
# ls 则查看不了但显示了“+”
~]# getfacl /ceshi
# file: /ceshi
# owner: root
# group: root
user::rwx
user:ceshi:r-x   # 可以看到文件对ceshi用户只有读执行权限
group::r-x
mask::r-x
other::r-x
​
# 测试结果
~]# su - ceshi
~]# cd /ceshi
~]$ touch www   # 报错
touch: cannot touch ‘www’: Permission denied
~]$ cat ceshi   # 没报错# 注意:如果给目录赋予 acl 权限,两条命令都要输入,
## 递归与默认的区别:
# 递归
~]# setfacl -m u:ceshi:rx -R /tmp/ceshi
~]# ls -l
total 0
-rw-r-xr--+ 1 root root 0 Jan  3 20:30 ceshi
# 只对已经存在的文件生效
​
# 默认
~]# setfacl -m d:u:love2:rx -R /root/
# 只对以后新建的文件生效
]# getfacl /tmp/ceshi/
getfacl: Removing leading '/' from absolute path names
# file: tmp/ceshi/
# owner: root
# group: root
user::rwx
user:ceshi:r-x
group::r-x
mask::r-x
other::r-x
default:user::rwx
default:user:ceshi:r-x
default:group::r-x
default:mask::r-x
default:other::r-x

注:acl权限一但设置递归则会权限溢出!!!

因为一般目录必须有执行权限所以递归后的文件默认就会有执行权限

3) 最大有效权限 mask

~]# getfacl /tmp/ceshi/
getfacl: Removing leading '/' from absolute path names
....
mask::rwx
.....
​
~]# setfacl -m m:6 /tmp/ceshi/
~]# getfacl /tmp/ceshi/
getfacl: Removing leading '/' from absolute path names
# file: tmp/ceshi/
# owner: root
# group: root
user::rwx
user:ceshi:r-x          #effective:r--
group::r-x          #effective:r--
mask::rw-
​
# mask权限除了不影响所有者和其他人的权限,其他的都会影响。
# 一旦重新设置acl权限,mask权限就会恢复。

4)删除acl权限

# 删除指定用户和用户组的 ACL 权限
~]# setfacl -x u:ceshi /tmp/ceshi/ceshi
~]# getfacl /tmp/ceshi/ceshi
getfacl: Removing leading '/' from absolute path names
# file: tmp/ceshi/ceshi
# owner: root
# group: root
user::rw-
group::r--
mask::r--# 删除文件的所有的 ACL 权限
~]# setfacl -b /tmp/ceshi/
~]# getfacl /tmp/ceshi
getfacl: Removing leading '/' from absolute path names
# file: tmp/ceshi
# owner: root
# group: root
user::rwx
group::r--
other::r-x

2.sudo 授权

普通用户执行某些命令没有权限时,可使用sudo命令赋予部分管理员权限。

有一些目录必须要root权限,如:

/sbin
/user/sbin/
......

注:赋予的权限越详细,普通用户得到的权限越小

赋予的权限越简单,普通用户得到的权限越大

visudo

赋予普通用户权限命令,命令执行后和 vim 一样使用

~]# visudo
# 给用户设置权限
root    ALL=(ALL)       ALL
#用户名  目标主机= (可使用的身份) 授权命令(绝对路径)
​
# 给组设置权限
%wheel        ALL=(ALL)       ALL
% 组名 被管理主机的地址 = (可使用的身份) 授权命令(绝对路径) 

例子

## 授权用户 ceshi 可以重启服务器,则visudo添加如下行:
~]# visudo
ceshi  ALL=(root)   /sbin/shutdown –r now
​
# 切换用户查看可用的授权
~]# su - ceshi
~]$ sudo -l
......
[sudo] password for ceshi:  # 要输入密码
.........
User ceshi may run the following commands on VM-0-142-centos:(root) /sbin/shutdown –r now
​
# 测试,必须使用自己写的提纯命令(写的越详细,命令权限越小)
~]$ sudo /sbin/shutdown –r now
​
2)授权love2用户可以添加其他普通用户
love2  ALL=/usr/sbin/useradd    #赋予 love2 添加用户权限.命令必须写入绝对路径
love2  ALL=/usr/bin/passwd
love2 ALL=/usr/bin/passwd [A-Za-z0-9]*,  !/usr/bin/passwd "",  !/usr/bin/passwd root   #赋予改密码权限,取消对 root 的密码修改切换love2 身份
sudo  /usr/sbin/useradd  love3  

3.文件特殊权限

1)检测Setuid

因为setuid权限比较危险,所以我们需要检查计算机内的可执行文件,看是否有一些可以文件被赋予setuid权限。 脚本参考于他人。可提前搜索系统中所有拥有 SUID 和 SGID 的文件作为模板文件。我的模板文件为/root/setuid.check

脚本测试系统中特殊权限

~]# vim ceshi.sh
#!/bin/bash
find / -perm -4000 -o -perm -2000 》 /tmp/setuid.check
# 搜索系统中默认的setuid和setgid文件并保存到文件中
for i in $(cat /tmp/setuid.check)
# 循环文件名
do
grep $i /root/suid.list > /dev/null
# 比这个文件名是否在模板文件中if [ "$?" != "0" ];then#如果在则不报错,不在则把不在的文件写到报错文件中echo "$i isn`t in listfile" >> /root/suid_log$(date +%f)
done     

注:系统不允许有setuid权限

SetUID

1)SetUID 是什么

SetUID 的功能可以这样理解:

占用属主(用户)的x位显示为s或S,取决于属主是否有x权限

  • 只有可以执行的二进制程序才能设定 SETUID 权限

  • 命令执行者要对该程序拥有 x(执行)权限

  • 命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程短暂成为为文件的属主)

SetUID 权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效

格式:chmod u+s [目录]

2)setuid举例

# passwd命令的执行位置权限是 s 代表passwd这个文件具有 setuid 权限。
~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd

当一个具有执行权限的文件设置 SetUID 权限后,用户执行这个文件时将以文件所有者的身份执行。/usr/bin/passwd命令具有 SetUID 权限,所有者为 root (Linux 中的命令默认所有者都是 root) , 也就是说当普通用户使用 passwd 更改自己密码的时候,一瞬间灵魂附体,实际是在用 passwd 命令所有者 root 的身份在执行 passwd 命令,命令执行完成 后该身份也随之消失。如果取消 SetUID 权限,则普通用户就不能修改自己的密码了。 测试

# 删除s权限
~]# chmod u-s /usr/bin/passwd
~]# su - ceshi
passwd: Authentication token manipulation error
# 用户修改密码报错。

SetGID

1)针对文件的作用

SGID 即可以针对文件生效,也可以针对目录生效,这和 SUID 明显不同。如果针对文件,SGID 的 含义如下:

  • 只有可执行的二进制程序才能设置 SGID 权限

  • 命令执行者要对该程序拥有 x(执行)权限

  • 命令执行在执行程序的时候,组身份升级为该程序文件的属组(临时)

  • SetGID 权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效

~]# ll /var/lib/mlocate/mlocate.db
-rw-r----- 1 root slocate 4252817 Dec  2 03:34 /var/lib/mlocate/mlocate.db
​
# 大家发现属主权限是 r、w,属组权限是 r,但是其他人权限是 0:
​
~]# ll /usr/bin/locate
-rwx--s--x. 1 root slocate 40520 Apr 11  2018 /usr/bin/locate
​
~]# su - ceshi
~]$ locate /etc/passwd
​
# 当普通用户 ceshi 执行 locate 命令时,会发生如下事情:/usr/bin/locate 是可执行二进制程序,可以赋予 SGID
​
# 用户 ceshi 执行/usr/bin/locate 命令时,组身份会升级为 slocate 组,而 slocate 组对 /var/lib/mlocate/mlocate.db 数据库拥有 r 权限,所以普通用户可以使用 locate 命令查询 mlocate.db 数据库 命令结束,ceshi 用户的组身份返回为 ceshi 组(也就是临时变成slocate)

2)针对目录的作用(作用不大)

如果 SGID 针对目录设置,含义如下:

  • 普通用户必须对此目录拥有 r 和 x 权限,才能进入此目录

  • 普通用户在此目录中的有效组会变成此目录的属组

  • 若普通用户对此目录拥有 w 权限时,新建的文件的默认属组是这个目录的属组。

Sticky BIT

Sticky BIT 粘着位,也简称为 SBIT。SBIT 目前仅针对目录有效,它的作用如下:

  • 粘着位目前只对目录有效

  • 普通用户对该目录拥有 w 和 x 权限,即普通用户可以在此目录拥有写入权限

  • 如果没有粘着位,因为普通用户拥有 w 权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一但赋予了粘着位,除了 root 可以删除所有文件,普通用户就算拥有 w 权 限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件。

~]# ls -ld /tmp/
drwxrwxrwt. 81 root root 4096 Jan  7 19:08 /tmp/
​
# 测试用root创建一个文件
~]# touch /tmp/root.txt
~]# cd /tmp/ceshi && ls -l root.txt
-rw-r--r-- 1 root root 0 Jan  7 19:09 root.txt
​
# 替换ceshi用户创建文件
~]# su - ceshi
~]$ touch ceshi.txt
~]$ ls -l
-rw-rw-r-- 1 ceshi ceshi    0 Jan  7 19:12 ceshi.txt
-rw-r--r-- 1 root root 0 Jan  7 19:09 root.txt
​
# 测试删除两个文件
~]$ rm -rf ceshi.txt
~]$ rm -rf root.txt
rm: cannot remove ‘root.txt’: Operation not permitted
# 得出拥有t权限的目录只能删自己的文件,且只有拥有x权限的目录才能赋t(小t),否则就是T(大T)

设定特殊权限的mask值

特殊权限这样来表示:

  • 4 代表 SUID

  • 2 代表 SGID

  • 1 代表 SBIT

新建目录默认权限为755mask -->0022修改则在umask后面加数字即可

新建文件默认权限为644(默然去掉x执行权限)

~]# chmod 4755 ftest  # 赋予 SUID 权限
~]# chmod 2755 ftest  # 赋予 SGID 权限
~]# mkdir dtest
~]# chmod 1755 dtest/ #SBIT 只对目录有效,所以建立测试目录,并赋予 SBIT
# 查看当前所在的权限
~]# umask -S

4.文件系统属性 chattr 权限

1)命令格式

~]# chattr [+-=] [选项] 文件或目录名
# 选项:
+: 增加权限
-: 删除权限
=: 等于某权限
​
i: 如果对文件设置 i 属性,那么不允许对文件进行删除、改名,也不能添加和修改数据;如果对目录设置 i 属性,那么只能修改目录下文件的数据,但不允许建立和删  除文件。
a: 如果对文件设置 a 属性,那么只能在文件中增加数据,但是不能删除也不能修改数据;如果对目录设置 a 属性,那么只允许在目录中建立和修改文件,但是不允许删  除
e: Linux 中绝大多数的文件都默认拥有 e 属性。表示该文件是使用 ext 文件系统进行存储的,而且不能使用“chattr -e”命令取消 e 属性。 

2)查看文件系统属性

lsattr

~]# lsattr 选项 文件名
选项:
-a  显示所有文件和目录
-d 若目标是目录,仅列出目录本身的属性,而不是子文件的
​
# 一般都是显示 e 权限
~]# lsattr .bashrc
-------------e-- .bashrc

示例

## 测试i选项
# 创建一个文件
~]# touch abc
~]# ll abc
-rw-r--r-- 1 root root 0 Jan  9 19:05 abc
​
# 设置i权限(此时ls -l看不到)
~]# chattr +i abc
~]# ll abc
-rw-r--r-- 1 root root 0 Jan  9 19:05 abc
# 查看权限e为文件系统
~]# lsattr abc
----i--------e-- abc
# 测试删除与写入
~]# rm -rf abc
rm: cannot remove ‘abc’: Operation not permitted
~]# echo 123 >> abc
-bash: abc: Permission denied
​
# 去掉i权限
~]# chattr -i abc
~]# lsattr abc
-------------e-- abc
~]# rm -rf abc
​
# 查看目录而非文件
~]# mkdir abc && touch abc/a.txt
~]# chattr +i abc
~]# lsattr abc
-------------e-- abc/a.txt  # 注:此时查看的是目录底下的文件而非目录本身~]# lsattr -d abc  # 加个-d就可以了
----i--------e-- abc

十四.文件系统管理

1.硬盘结构

1)硬盘的逻辑结构

硬盘的大小是使用“磁头数×柱面数×扇区数×每个扇区的大小”这样的公式来计算的。其中磁头数(Heads)表示硬盘总共有几个磁头,也可以理解成为硬盘有几个盘面,然后乘以二;柱面数 (Cylinders)表示硬盘每一面盘片有几条磁道;扇区数(Sectors)表示每条磁道上有几个扇区;每个扇区的大小一般为 512Byte。扇区也是磁盘的最小存贮单位。(也可以说柱面就是磁道)

2)硬盘接口

  • IDE 硬盘接口(Integrated Drive Electronics,并口,即电子集成驱动器)也称作“ATA 硬盘” 或“PATA 硬盘”,是早期机械硬盘的主要接口,ATA133 硬盘的理论速度可以达到 133MB/s (此速度为理论平均值)。

  • SATA 接口(Serial ATA,串口)是速度更高的硬盘标准,具备了更高的传输速度,并具备了更强的纠错能力。目前已经是 SATA 三代,理论传输速度达到 600MB/s(此速度为理论平均值)(现在主要市面上用的)

  • SCSI 接口(Small Computer System Interface,小型计算机系统接口)广泛应用在服务器上, 具有应用范围广、多任务、带宽大、CPU 占用率低及支持热插拔等优点,理论传输速度达到 320MB/s(以淘汰不用)

  • PCI-E 接口暂只在苹果电脑上用,理论传输速度达到 2000MB/s

现在采用分级存储机制

CPU-->1级缓存-->2级缓存-->3级缓存-->内存-->disk(磁盘)

2.linux文件系统

1)Linux 文件系统的特性

  • super block(超级块):记录整个文件系统的信息,包括 block 与 inode 的总量,已经使用的 inode 和 block 的数量,未使用的 inode 和 block 的数量,block 与 inode 的大小,文件系统的挂载时间,最近一次的写入时间,最近一次的磁盘检验时间等。

  • date block(数据块,也称作 block):用来实际保存数据的,block 的大小(1KB、2KB 或 4KB)和数量在格式化后就已经决定,不能改变,除非重新格式化。每个 blcok 只能保存一个文件的数据,要是文件数据小于一个 block 块,那么这个 block 的剩余空间不能被其他文件使用,要是文件数据大于一个 block 块,则占用多个 block 块。Windows 中磁盘碎片整理 工具的原理就是把一个文件占用的多个 block 块尽量整理到一起,这样可以加快读写速度。

  • inode:用来记录文件的权限(r、w、x),文件的所有者和属 组,文件的大小,文件的状态改变时间(ctime),文件的最近一次读取时间(atime),文件的最近一次修改时间(mtime),文件的数据真正保存的 block 编号。每个文件需要占用一个 inode。

# 查看block与inode的数量
~]# dumpe2fs -h  /dev/vdb1
.......
# 查看该磁盘的总数量
Inode count:              19660800
Block count:              78642944
........
# 查看多少个占用
Free blocks:              42366138
Free inodes:              18978056
​
# 查看块组
~]# dumpe2fs  /dev/vdb1
# 多少个组
Group 2399: (Blocks 78610432-78642943) [INODE_UNINIT, ITABLE_ZEROED]Checksum 0x9f83, unused inodes 8192# 从什么时候开始到什么时候结束Block bitmap at 78118927 (bg #2384 + 15), Inode bitmap at 78118943 (bg #2384 + 31)Inode table at 78126624-78127135 (bg #2384 + 7712)1792 free blocks, 8192 free inodes, 0 directories, 8192 unused inodes# 还有多少的未用Free blocks: 78641152-78642943Free inodes: 19652609-19660800
# 主要是先分为快组,然后再分为block,inode

2)常见文件系统

文件系统 简介
ext Linux 中最早的文件系统,由于在性能和兼容性上具有很多缺陷,现在已经很少使用
ext2 是 ext 文件系统的升级版本,Red Hat Linux 7.2 版本以前的系统默认都是 ext2 文件 系统。于 1993 年发布,支持最大 16TB 的分区和最大 2TB 的文件 (1TB=1024GB=1024×1024KB)
ext3 是 ext2 文件系统的升级版本,最大的区别就是带日志功能,以便在系统突然停止时 提高文件系统的可靠性。支持最大 16TB 的分区和最大 2TB 的文件
ext4 是 ext3 文件系统的升级版。ext4 在性能、伸缩性和可靠性方面进行了大量改进。ext4 的变化可以说是翻天覆地的,比如向下兼容 ext3、最大 1EB 文件系统和 16TB 文件、无 限数量子目录、Extents 连续数据块概念、多块分配、延迟分配、持久预分配、快速 FSCK、 日志校验、无日志模式、在线碎片整理、inode 增强、默认启用 barrier 等。它是 CentOS 6.x 的默认文件系统
xfs XFS 最早针对 IRIX 操作系统开发,是一个高性能的日志型文件系统,能够在断电以及 操作系统崩溃的情况下保证文件系统数据的一致性。它是一个 64 位的文件系统,后来 进行开源并且移植到了 Linux 操作系统中,目前 CentOS 7.x 将 XFS+LVM 作为默认的文 件系统。据官方所称,XFS 对于大文件的读写性能较好。
swap swap 是 Linux 中用于交换分区的文件系统(类似于 Windows 中的虚拟内存),当内存 不够用时,使用交换分区暂时替代内存。一般大小为内存的 2 倍,但是不要超过 2GB。 它是 Linux 的必需分区
NFS NFS 是网络文件系统(Network File System)的缩写,是用来实现不同主机之间文件 共享的一种网络服务,本地主机可以通过挂载的方式使用远程共享的资源
iso9660 光盘的标准文件系统。Linux 要想使用光盘,必须支持 iso9660 文件系统
fat 就是 Windows 下的 fat16 文件系统,在 Linux 中识别为 fat
vfat 就是 Windows 下的 fat32 文件系统,在 Linux 中识别为 vfat。支持最大 32GB 的分区 和最大 4GB 的文件
NTFS 就是 Windows 下的 NTFS 文件系统,不过 Linux 默认是不能识别 NTFS 文件系统的,如 果需要识别,则需要重新编译内核才能支持。它比 fat32 文件系统更加安全,速度更快, 支持最大 2TB 的分区和最大 64GB 的文件
proc Linux 中基于内存的虚拟文件系统,用来管理内存存储目录/proc
sysfs 和 proc 一样,也是基于内存的虚拟文件系统,用来管理内存存储目录/sysfs
tmpfs 也是一种基于内存的虚拟文件系统,不过也可以使用 swap 交换分区

3.常用的硬盘管理命令

1)df 查看分区的使用情况

# 格式 df [选项]
~]# df -h
Filesystem                    Type   Size  Used Avail Use% Mounted on
/dev/mapper/vg_centos-lv_root ext4    18G  1.9G   15G  12% /
tmpfs                         tmpfs  491M     0  491M   0% /dev/shm
/dev/sda1                     ext4   477M   34M  418M   8% /boot
​
# Filesystem(设备文件名)Type(类行)Size(总大小)Used(占用有多大)Avail(空闲)Use%(利用率)   Mounted on(挂载点)
​
# 选项(常用的有hT包括文件类型与输出G,M的可视的输出;i查看inode与block;a所有文件系统;h输出G,M的可视的输出)
-a, --all 包含所有的具有 0 Blocks 的文件系统
--block-size={SIZE} 使用 {SIZE} 大小的 Blocks
-h, --human-readable 使用人类可读的格式(预设值是不加这个选项的...)
-H, --si 很像 -h, 但是用 1000 为单位而不是用 1024
-i, --inodes 列出 inode 资讯,不列出已使用 block
-k, --kilobytes 就像是 --block-size=1024
-l, --local 限制列出的文件结构
-m, --megabytes 就像 --block-size=1048576
--no-sync 取得资讯前不 sync (预设值)
-P, --portability 使用 POSIX 输出格式
--sync 在取得资讯前 sync
-t, --type=TYPE 限制列出文件系统的 TYPE
-T, --print-type 显示文件系统的形式
-x, --exclude-type=TYPE 限制列出文件系统不要显示 TYPE
-v (忽略)
--help 显示这个帮手并且离开
--version 输出版本资讯并且离开

2)du 统计文件大小

# 注:ls只能统计文件大小,不能统计目录大小(只能统计block的大小)
~]# ls -lh /
total 60K
dr-xr-xr-x.   5 root root 4.0K Jan  6 18:07 boot
# 所以可以用du统计;统计当前文件大小
# 格式 du [选项] 文件名
~]# du -h
132k    .

3)du与df的区别:

df统计的是空间大小,统计的剩余空是准确的(包括临时文件,删除的垃圾文件,内核的临时文件等)

du统计文件大小,统计的文件大小是准确的;

如果长时间不重启,两者之间统计的大小就会有差异;如果不重启的话可以查看被删除的文件,然后一个一个的进程kill掉

# lsof 是 List Open File 的缩写, 它主要用来获取被进程打开文件的信息,of命令可以查看所有已经打开了的文件,比如: 普通文件,目录,特殊的块文件,管道,socket套接字,设备,Unix域套接字等等
​
~]# lsof | grep delete
# 注:这样杀容易杀死系统,还是会重启

4)fsck 文件系统修复命令

#一般linux开机就会自动修复,如果自动修复不行的话,手动也就没有意义
~]# fsck -y /dev/sda1
fsck from util-linux-ng 2.17.2
e2fsck 1.41.12 (17-May-2010)
/dev/sda1 is mounted.
e2fsck: Cannot continue, aborting.

5)dumpe2fs 显示磁盘状态

~]# dumpe2fs /dev/mapper/vg_centos-lv_root -h
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name:   <none>  # 卷标名
Last mounted on:          /       # 挂载目录
Filesystem UUID:          92e4492e-b1a7-4e8b-a82f-09ba6afedc08
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash
Default mount options:    user_xattr acl  #挂载参数
Filesystem state:         clean       #文件系统状态
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              1152816   # inode数量
Block count:              4605952  # block 数量
Reserved block count:     230297
Free blocks:              4027007  # 可使用的block块
Free inodes:              1096540  # 可使用de inode
First block:              0
Block size:               4096    # 一个block数量4096bytes
Fragment size:            4096
......

6)查看文件的详细信息

~]# stat 123.txt
File: `123.txt`
Size: 0             Blocks: 0          IO Block: 4096   regular empty file
#文件大小               占用块              系统分区块大小
Device: fd00h/64768d    Inode: 924444          Links: 1
#存放文件的设备            inode 号               硬链接数
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)权限                  属主                   属组
Access: 2019-12-03 10:34:25.644828377 +0800  #访问时间
Modify: 2019-12-03 10:34:25.644828377 +0800  #文件数据修改时间
Change: 2019-12-03 10:34:25.644828377 +0800  #文件状态修改时间

7)判断文件类型

## 判断文件类型
~]# file  文件名
# 一般用来判断压缩文件类型
~]# file a.tar
a.tar: POSIX tar archive (GNU)
​
# 判断命令类型
~]# type  命令名   

4.分区与使用的概述

格式化:赋予空间文件系统的过程

文件系统:数据在空间中存放的规则

5.计算机的容量单位

一般用B,KB,MB,GB,TB,PB,EB,ZB,YB,BB来表示,它们之间的关系是:

1KB (Kilobyte千字节)=1024B,

1MB (Megabyte兆字节简称“兆”)=1024KB,

1GB (Gigabyte吉字节又称“千兆”)=1024MB,

1TB (Terabyte万亿字节太字节)=1024GB,

1PB (Petabyte千万亿字节拍字节)=1024TB,

1EB (Exabyte百亿亿字节艾字节)=1024PB,

1ZB (Zettabyte十万亿亿字节泽字节)= 1024 EB,

1YB (Yottabyte一亿亿亿字节尧字节)= 1024 ZB,

1BB (Brontobyte一千亿亿亿字节)= 1024 YB.

产商一般=1000

一块硬盘的“艺术”之旅(硬盘空间使用,经历的步骤)

识别硬盘=>分区规划=>格式化=>挂载使用

6.MBR与GPT磁盘分区与分区工具

我们 Linux 系统中有两种常见的分区表 MBR 分区表(主引导记录分区表)和 GPT 分区表(GUID 分 区表)

  • MBR 分区表:支持的最大分区是 2TB(1TB=1024GB);最多支持 4 个主分区,或 3 个主分区 1 个扩展分区

  • GPT 分区表:支持最大 18EB 的分区(1EB=1024PB=1024*1024TB);最多支持 128 个分区,其 中 1 个系统保留分区,127 个用户自定义分区

parted 命令也有点小问题,就是命令自身分区的时候只能格式化成 ext2 文件系统,不支持 ext3 文件系统,那就更不用说 ext4 文件系统了,不过这没有太多的影响,因为我们可以先分区再用 mkfs 进行格式化。

Linux下分区工具

MBR GPT
对话框 fdisk parted fdisk parted gdisk
模拟图形界面x cfdisk cfdisk cgdisk
非交换 sfdisk parted sfdisk sgdisk parted
图形界面 gparted gnome-disk-utility partitionmanager gparted gnome-disk-utility partitionmanager

7.fdisk 命令手工分区

# 命令格式:
fdisk  常用交互指令
~]# fdisk [磁盘名]
m   # 列出指令帮助
p   # 查看现有的分区表(存放分区信息的表格)
n   # 新建分区
d   # 删除分区
q   # 放弃更改并退出
w   # 保存更改并退出

注:分好的区在linux上默认不支持扩展,windows可以但是有风险

1)fdisk -l

# 查看系统所有硬盘及分区的详细信息
~]# fdisk -l
Disk /dev/vda: 107.4 GB, 107374182400 bytes, 209715200 sectors
.....
Disk /dev/vdb: 214.7 GB, 214748364800 bytes, 419430400 sectors
.....
​
# 查看所有硬盘简要信息
~]# lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sr0     11:0    1 142.6M  0 rom
vda    253:0    0   100G  0 disk
└─vda1 253:1    0   100G  0 part /
vdb    253:16   0   200G  0 disk
└─vdb1 253:17   0   200G  0 part 

2)使用fdisk手工分区

首先需要准备一块新硬盘,虚拟机直接添加即可。

注:添加硬盘linux机器必须重启才能识别(不论虚拟机还是生产环境)

1.进入分区界面

~]# fdisk /dev/vdb
......
Command (m for help):m   # 输入 m 获取帮助
a   toggle a bootable flag
b   edit bsd disklabel
c   toggle the dos compatibility flag
d   delete a partition
l   list known partition types
m   print this menu
n   add a new partition
o   create a new empty DOS partition table
p   print the partition table
q   quit without saving changes
s   create a new empty Sun disklabel
t   change a partition's system id
u   change display/entry units
v   verify the partition table
w   write table to disk and exit
x   extra functionality (experts only)  
命令 说明
a 设置可引导标记
b 编辑 bsd 磁盘标签
c 设置 DOS 操作系统兼容标记
d 删除分区
l 打印出已有分区类型
m 显示帮助菜单
n 添加分区
o 创建dos分区表
p 打印分区列表
q 离开不保存修改
s 新建空白 SUN 磁盘标签
t 改变一个分区的系统 ID
u 改变显示记录单位
v 验证分区表
w 写入分区信息,且退出
z 附加功能

l:查看所有文件系统默认83:linux;

t:修改默认文件系统

Command (m for help): l
..... 82  Linux swap  83  Linux
......

2.MBR简单分区

## 建立一个主分区
~]# fdisk /dev/vdb
Command (m for help): n   #创建新分区
Command action
Partition type:p   primary (1 primary, 0 extended, 3 free)e   extended
Select (default p): p
#创建分区类型   (p)主分区,或者(e)扩展分区。主分区+扩展分区一共只能有4个。
Partition number (1-4): 1
#选择分区号,这里选择了1,所以该分区名为:vdb1
First cylinder (1-2610, default 1):
#起始柱面,现在不支持调整,默认就行
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +2G
#结束柱面,这里为2G,不带单位为柱面数。(但是最后还是会以柱面计算,一个柱面大概80Mib左右)
​
Command (m for help): p
#此时在打印分区信息,就可以看到已经分好了的vdb1
​
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x65072461
​
Device Boot      Start         End      Blocks   Id  System
/dev/vdb1            1         262     2104483+  83  Linux
# 分区名        第几个区     多少个柱面   大小     文件系统id  文件系统
​
## 建立扩展分区
Command (m for help): n
Command action
Partition type:p   primary (1 primary, 0 extended, 3 free)e   extended
Select (default p): e
# 扩展分区
Partition number (1-4): 2
First cylinder (263-2610, default 263):
# 默认就好
Using default value 263
Last cylinder, +cylinders or +size{K,M,G} (263-2610, default 2610):
#不输入,默认到最后一个柱面,也就是使用全部剩余空间。
Using default value 2610
​
# 扩展分区建立完成后不能使用,还需要在扩展分区内建立逻辑分区。
# 我们来建立逻辑分区,逻辑分区会自动分配id,无需手动输入
Command (m for help): n
Command action
Partition type:l   logical (5 or over)
Select (default p): l
# 此时就会出现规划逻辑分区
First cylinder (263-2610, default 263):
Using default value 263
Last cylinder, +cylinders or +size{K,M,G} (263-2610, default 2610): +5G
​
Command (m for help): p
# 查看
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xa080c4f9
​
Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         262     2104483+  83  Linux
/dev/sdb2             263        2610    18860310    5  Extended
/dev/sdb5             263         916     5253223+  83  Linux
​
# 按 w 保存退出
Command (m for help): w
The partition table has been altered!
​
Calling ioctl() to re-read partition table.
Syncing disks.
# 有时因为系统分区正忙导致无法保存退出,则需要重启reboot(如果上一次分完区,这边直接操作就会这样),重启之后会直接生效不需要再分了;
​
## 查看分好的分区
~]# fdisk -l 或者 lsblk

3.刷新分区

# 格式
~]# partprobe [磁盘]或[分区]
​
# 示例
~]# partprobe /dev/vdb

注:这不是分区必须命令,如果没有提示重启,可以不执行,也可以重启系统。partprobe 强制重读所有分区文件,重新挂载分区文件内所有分区。

4 .格式化

建立文件系统 ext3 是 linux 默认文件系统

# 7系统之前格式化
~]# mkfs  -t  文件类型  分区
~]# mkfs  -t  ext4  /dev/vdb5
​
# 7系统之后
~]# mkfs.[类型]  分区
~]# mkfs.xfs /dev/vdb1
# mkfs 命令非常简单易用,不过是不能调整分区的默认参数的(比如块大小是 4096),这些默认 参数除非特殊情况,否则不需要调整,如果想要调整就需要使用 mke2fs 命令进行重新格式化,
​
#格式:
~]# mke2fs [选项] 分区设备文件名
选项:
-t 文件系统: 指定格式化成哪个文件系统,如 ext2,ext3,ext4
-b 字节:  指定 block 块的大小
-i 字节:  指定“字节/inode”的比例,也就是多少个字节分配一个 inode
-j:   建立带有 ext3 日志功能的文件系统
-L 卷标名:  给文件系统设置卷标名,就不使用 e2label 命令设定了
​
# 示例:
~]# mke2fs -t ext4  -b 4096  /dev/vdb5
# 格式化分区,并指定 block 的大小为 4096字节,不建议修改,默认4k就好

5 .建立挂载点

# linux,只有当分区被挂载才能被使用
~]# mkdir /mnt/vdb1
~]# mkdir /mnt/vdb5

6 .挂载

# 格式
~]# mount   分区   挂载点
~]# mount  /dev/vdb1  /mnt/vdb1
~]# mount  /dev/vdb5  /mnt/vdb5

7 .查看

~]# cd /mnt/sdb1
~]# df . -h
df . -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vdb1       200G   32G  169G  16% /mnt/sdb1

8 .自动挂载

注:只支持固定配置挂载,否则可能会导致linux崩溃

# 修改分区自动挂载文件
~]# vim /etc/fstab
/dev/vdb1               /mnt/vdb1          xfs         defaults        0 0
第一列: 设备文件名(推荐写UUID)
第二列  挂载点
第三列  文件系统(光盘:iso9660)
第四列  挂载选项
第五列  是否可以被备份  0 不备份  1 每天备份 2 不定期备份
第六列  是否检测磁盘 fsck 0 不检测  1 启动时检测 2 启动后检测
~]# mount -a
​
# 查看分区UUID
~]# dumpe2fs /dev/vdb5
~]# ls -l /dev/disk/by-uuid/

9 .测试

# 重启测试
~] # reboot
# mount  -a 重新自动挂载fstab内未挂在设备。
~]# mount -a 

10.删除分区

# 先删除自动挂载,取消挂载,删除分区
~]# vim /etc/fdis
/dev/vdb1               /mnt/vdb1          xfs         defaults        0 0
~]# umount  /mnt/vdb1
~]# fdisk /dev/vdb
Welcome to fdisk (util-linux 2.23.2).
​
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
​
# d删除,如果只有一个则直接删除,如果有哦两个只需要选择
Command (m for help): d
Selected partition 1
Partition 1 is deleted
# 保存退出
Command (m for help): w

4.parted分区命令

Parted是一个比fdisk更高级的工具,它支持多种分区表格式,包括MS-DOS和GPT。它允许用户创建,删除,调整大小,缩小,移动和复制分区,重新组织磁盘使用,以及将数据复制到新硬盘,但在缩小分区时它没有按预期工作,我大部分时间都得到了错误,所以我建议用户不要缩小分区,GParted是分手的GUI前端。作为一种设计用于Linux的工具,它没有构建成处理与fdisk关联的多种分区类型,但是,它可以处理最常见的分区格式,包括:ext2、ext3、fat16、fat32、NTFS、ReiserFS、JFS、XFS、UFS、HFS以及Linux交换分区。

这里要主要parted的操作是即刻生效的,所以操作前要认真想好

1)parted命令格式与选项指令

# 用法:
~]# parted [选项] [设备] [指令]
# 将带有“参数”的命令应用于“设备”。如果没有给出“命令”,则以交互模式运行。
​
# 选项:
-h,   显示此求助信息
-l,   列出系统系统中所有的磁盘设备,和fdisk -l命令的作用差不多。
-m,   进入交互模式,如果后面不加设备则对第一个磁盘进行操作
-s,   脚本模式
-v,    显示版本
​
# 设备:磁盘设备名称,如/dev/sda
​
# 指令:如果没有给出“指令”,则parted将进入交互模式运行。
​
align-check     # 检查分区N的类型(min|opt)是否对齐
help         # 打印通用求助信息,或关于[指令]的帮助信息
mklabel       # 创建新的磁盘标签 (分区表)
mkpart        # 创建一个分区
name         # 给指定的分区命名
print         # 打印分区表,或者分区
quit         # 退出程序
rescue        # 修复丢失的分区
resizepart     # 调整分区大小
rm           #  删除分区
select        # 选择要编辑的设备,默认只对指定的设备操作,这里可以改变指定的设备
disk_set       # 更改选定设备上的标志
disk_toggle     # 切换选定设备上的标志状态
set          # 更改分区的标记
toggle         # 设置或取消分区的标记
unit          # 设置默认的单位
version        # 显示版本信息

2)parted交互模式分区管理

与fdisk类似,parted可以使用命令“parted 设备名”进入交互模式。进入交互模式后,可以通过parted的各种指令对磁盘分区进行管理。

新建GPT分区

## 这里要主要parted的操作是即刻生效的,所以操作前要认真想好。
~]# parted /dev/sdb      #对磁盘/dev/sdb进行分区
GNU Parted 3.2
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)    
#如果忘记有那些可用的命令按两次Tab键可以显示所以可用的指令,也支持Tab命令补齐,和上下查找历史记。可用命令如下:
align-check  disk_toggle mklabel  mktable print rescue resizepart select toggle    version      disk_set   help    mkpart  name  quit   resize    rm    set  unit
​
(parted) help mklable       
#查看mklable命令的用法及支持的分区表
mklabel,mktable LABEL-TYPE create a new disklabel (partition table)            
#用法,用mktable也是一样的作用
LABEL-TYPE is one of: atari, aix, amiga, bsd, dvh, gpt, mac, msdos, pc98, sun, loop     #支持的分区类型
​
# 创建gpt分区表,如果以存在分区表也可以通过这里命令更改
(parted) mklable gpt           
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? yes               
# 警告用户磁盘上的数据将会被销毁,询问是否继续,我们这里是新的磁盘,输入yes后回车
(parted) print              
#查看分区表的信息
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt          
# 分区表以是gpt格式
Disk Flags:
​
Number   Start   End    Size    File system   Name    Flags
​
(parted) mkpart      
#输入mkpart新建分区,如果输入mkpart指令不带任何参数,parted会一步步提示用户输入相关信息最终完成创建,如下所示:
Partition name? []?    
#分区的名字,这里可以直接回车不给分区命名,也可以输入用来标记的名字
File system type? [ext2]?      
#分区被格式化的文件系统,可以按两次Tab键查看支持的文件系统
affs0   affs6   amufs3   btrfs    freebsd-ufs   linux-swap   ntfs
affs1    affs7    amufs4    ext2    hfs   linux-swap(new)   reiserfs
affs2    amufs    amufs5    ext3   hfs+ linux-swap(old)    sun-ufs
affs3   amufs0    apfs1    ext4   hfsx   linux-swap(v0)   swsusp
affs4    amufs1   apfs2   fat16   hp-ufs   linux-swap(v1) xfs
affs5    amufs2    asfs fat32   jfs    nilfs2   zfs
File system type? [ext2]? ext4     
# 输入被格式化的文件系统为ext4,这里必须要输入文件系统
Start?  0%             
# 开始位置,这里要输入0%或2048s或1M都可以但是不要输入别的,下面有说明。
End?  1G              
# 结束位置,默认单位为compact,我们想要用其他单位必须在数字后面加上单位
(parted) mkpart pname ext4 1G 2G    
# 如果想一步就把分区创建好可以像左边一样,pname表示分区名这样分区这里必须有,后面3项目分别是文件系统,开始位置,结束位置
(parted) mkpart pname  2G 100%     
# 如果不想创建文件系统这里可以不加这个选项,后面两项分别是开始位置,和结束位置,100%表示使用全部剩余空间
(parted) p               
# 输入print查看分区情况,如果指令是唯一的直接输入指令的首字母也可以。
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 5369MB             
#磁盘的总容量
Sector size (logical/physical): 512B/512B     
#扇区的大小
Partition Table: gpt
Disk Flags:
​
Number    Start   End      Size    File system    Name   Flags
1       1049kB   1000MB    999MB    ext4              
#通过一步步创建的第一个分区
2       1000MB   2000MB    999MB    ext4          pname      
#通过一步就创建的分区
3       2000MB   5368MB    3368MB                pname      
#创建不带文件系统的分区
​
## 如果Start位置输入的不是0%或2048s或1M或0G的数值,分区结束会有这个的提示,Warning: The resulting partition is not properly aligned for best performance.Ignore/Cancel? (意思是说警告:生成的分区没有正确对齐以获得最佳性能。忽略/取消? 我们可以输入Ignore以忽略,但是这样并不好)这是因为在512B扇区的磁盘驱动器上,Parted希望分区从2048的倍数(即1 MiB对齐)扇区开始

设置默认的单位

#输入unit更改默认单位,如果不知道支持那些单位直接回车
(parted) unit        
Unit? [compact]?     
#按两次Tab键,列出支持的单位,在parted交互模式下不知道怎么输入就先按两次Tab键看看有什么结果,很好用
% B chs compact cyl GB GiB kB kiB MB MiB s TB TiB
Unit? [compact]? GB    
#输入更改后的默认单位
(parted) p
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 5.37GB          
#默认单位以改称GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
​
Number    Start     End     Size    File system   Name   Flags
1      0.00GB   1.00GB     1.00GB    ext4               
#默认单位以改称GB
2      1.00GB   2.00GB    1.00GB    ext4       pname
3      2.00GB   5.37GB  3.37GB               pname

更改分区名

# 输入name指令更改分区名,输入后直接回车
(parted) name              
Partition number? 3
#输入要更改名的分区号
Partition name? [pname]? namep    
#输入新的名字
(parted) p
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 5.37GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
​
Number   Start     End       Size   File system  Name    Flags
1      0.00GB    1.00GB     1.00GB  ext4
2       1.00GB    2.00GB     1.00GB  ext4      pname
3      2.00GB    5.37GB     3.37GB              namep           
#名称已经更改

配置分区的标记

## parted的分区标记相当于fdisk gdisk里面的分区类型
#输入set更改分区标记,输入后直接回车
(parted) set                  
Partition number? 3               
#更改标记的分区
Flag to Invert?                 
#输入更改标记的类型,按二次Tab键查看支持的类型
atvrecv boot esp hp-service legacy_boot msftdata prep
bios_grub diag hidden irst lvm msftres raid
Flag to Invert? lvm              
#标记为lvm类型
New state? [on]/off? on            
#输入on回车表示打开
(parted) p
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 5.37GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
​
Number    Start     End      Size    File system    Name   Flags
1        0.00GB    1.00GB   1.00GB    ext4
2        1.00GB    2.00GB   1.00GB    ext4        pname
3       2.00GB    5.37GB   3.37GB               pname      lvm       #Flags分区的标记已经成效
​
# 取消标记操作
(parted) set                 
Partition number? 3
Flag to Invert? lvm
New state? on/[off]? off            
#添加标记和取消标记的主要区别就在这里,这里要输入off来关闭标记
(parted) p
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 5.37GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
​
Number     Start    End     Size   File system    Name   Flags
1        0.00GB    1.00GB  1.00GB    ext4
2        1.00GB    2.00GB    1.00GB    ext4       pname
3       2.00GB     5.37GB     3.37GB            pname         
#Flags分区的标记已经取消

删除分区

#输入删除指令rm直接回车,如果后面加上分区号在回车就可以直接删除分区
(parted) rm         
Partition number? 3     
#输入要删除的分区,这里操作一定要慎重,一旦回车就生效了,是不可退的。
(parted) p
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 5.37GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:Number    Start    End    Size    File system    Name   Flags      
#成功删除了分区
1       0.00GB   1.00GB  1.00GB
2        1.00GB   2.00GB  1.00GB               pname

查看剩余可用的空间等信息

# 先查看分区的信息
parted) p             
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 5.37GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
​
Number    Start    End    Size    File system   Name   Flags
1      0.00GB   1.00GB   1.00GB
2       1.00GB   2.00GB   1.00GB         pname
​
# 可用分区的容量需要用Disk /dev/sdb: 这行提供的总容量减去最后一个分区的结束位置的容量,这里举例中可用分区容量为:5.37GB-2.00GB=3.37G

调整分区大小

## 尽量不要对分区进行调整,可能会丢失数据,如果要调整也要先备份数据
# 输入调整分区的指令resizepart直接回车,这里增加容量,增加容量的分区后面必须得有可用的未分配的分区
# 增加容量
(parted) resizepart       
Partition number? 2      
#输入要更改的分区
End? [2.00GB]? 4G       
#扩容后这个分区的结束位置,这个要根据扩容前分区结束的位置和增加的容量来确定最终的分区位置
(parted) p
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 5.37GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
​
Number   Start    End       Size    File system   Name    Flags
1       0.00GB   1.00GB   1.00GB
2      1.00GB   4.00GB   3.00GB   ext4      pname
​
## 这里减少容量
(parted) resizepart              
Partition number? 2
End? [4.00GB]? 3G
Warning: Shrinking a partition can cause data loss, are you
sure you want to continue?
Yes/No? yes                  
#减少容量会有这样的警告:收缩分区会导致数据丢失,你确定要继续吗?

3)非交互式parted分区命令

非交互模式建议把要操作的命令都在文本文件中写出来,确认无误后在进行配置。

创建GPT分区表

# 通过这里命令直接创建GPT分区表
~]# parted /dev/sdc mklabel gpt         
Information: You may need to update /etc/fstab.# 通过这里命令直接查看分区信息,print改称p也可以
~]# parted /dev/sdc print             Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdc: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt                      # 创建成功
Disk Flags:
Number   Start   End   Size    File system    Name    Flags

创建分区

# 创建1G容量的分区pname为分区名必须添加,这里不能直接添加文件系统类型,后面是起始和结束位置
~]# parted /dev/sdc mkpart pname 0G 1G  
# 查看
~]# parted /dev/sdc p
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdc: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:Number   Start      End       Size    File   system   Name    Flags
1      1049kB     1000MB    999MB                pname           
#成功创建,起始位置是0G也会从2048扇区开始创建。

更改默认显示单位

# 需要在查看指令print前添加unit GB指令来以GB显示
~]# parted /dev/sdc unit GB print    
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdc: 5.37GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
​
Number   Start     End     Size    File system    Name    Flags
1       0.00GB    1.00GB   1.00GB              pname
2       1.00GB    2.00GB   1.00GB              pname
3       2.00GB    5.37GB    3.37GB              pname

更改分区名

# 更改分区3的分区名
~]# parted /dev/sdc name 3 namep        
# 查看
~]# parted /dev/sdc print
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdc: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
​
Number   Start     End     Size    File system    Name   Flags
1       1049kB    1000MB    999MB              pname
2       1000MB     2000MB   999MB               pname
3      2000MB    5368MB    3368MB              namep         
#更改成功

配置分区的标记

## 为分区3添加lvm标记
~]# parted /dev/sdc set 3 lvm           
New state? [on]/off? on                  
#输入on回车表示打开
Information: You may need to update /etc/fstab.
# 查看
~]# parted /dev/sdc print
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdc: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
​
Number    Start    End      Size    File system    Name    Flags
1        1049kB    1000MB    999MB          pname
2        1000MB   2000MB   999MB           pname
3        2000MB   5368MB    3368MB          namep   lvm
​
## 取消分区3的lvm标记
~]# parted /dev/sdc set 3 lvm           
New state? on/[off]? off                    
# 添加标记和取消标记的主要区别就在这里,这里要输入off来关闭标记
Information: You may need to update /etc/fstab.
# 查看
~]# parted /dev/sdc print
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdc: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
​
Number    Start      End      Size    File system    Name    Flags
1        1049kB     1000MB    999MB               pname
2        1000MB     2000MB     999MB              pname
3        2000MB     5368MB    3368MB              namep             
#取消分区3的lvm标记成功

删除分区

# 删除分区3
~]# parted /dev/sdc rm 3          
Information: You may need to update /etc/fstab.
# 查看
~]# parted /dev/sdc print
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdc: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:Number    Start     End      Size   File system    Name    Flags       
# 删除分区3成功
1       1049kB   1000MB    999MB         pname
2       1000MB   2000MB   999MB         pname

查看剩余可用的空间等信息

#查看分区的信息,以GB为单位显示
~]# parted /dev/sdc unit GB print      
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 5.37GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
​
Number Start End Size File system Name Flags
1 0.00GB 1.00GB 1.00GB
2 1.00GB 2.00GB 1.00GB pname
​
# 可用分区的容量需要用Disk /dev/sdb: 这行提供的总容量减去最后一个分区的结束位置的容量,这里举例中可用分区容量为:5.37GB-2.00GB=3.37G

调整分区大小

## 尽量不要对分区进行调整,可能会丢失数据,如果要调整也要先备份数据
#增加分区容量,要输入调整分区的指令及调整的分区,和扩容后这个分区的结束位置,这个要根据扩容前分区结束的位置和增加的容量来确定最终的分区位置
~]# parted /dev/sdc resizepart 2 4G    
Information: You may need to update /etc/fstab.
​
root@debian:~# parted /dev/sdc unit GB print
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdc: 5.37GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
​
Number      Start     End     Size    File system    Name   Flags
1        0.00GB   1.00GB    1.00GB    ext4      pname
2        1.00GB    4.00GB    3.00GB    ext4      pname       
#分区2的容量已经增加
​
## 减小分区的容量
~]# parted /dev/sdc resizepart 2 3G                   
Warning: Shrinking a partition can cause data loss, are you
sure you want to continue?
Yes/No? yes                       
#减少容量会有这样的警告:收缩分区会导致数据丢失,你确定要继续吗?
Information: You may need to update /etc/fstab.
# 查看
~]# parted /dev/sdc unit GB print
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdc: 5.37GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
​
Number    Start    End    Size    File system    Name    Flags
1       0.00GB   1.00GB    1.00GB    ext4       pname
2      1.00GB   3.00GB    2.00GB     ext4      pname             
#分区2的容量已经减少

4)parted配额MBR分区

实际生产用对MBR的分区推荐用fdisk来进行操作

更改分区表

# 将现有的GPT分区更改成MBR分区,新磁盘也是通过这个指令来创建MBR分区
(parted) mklabel msdos            
Warning: The existing disk label on /dev/sdb will be destroyed
and all data on this disk will be lost. Do you want to
continue?                   
#警告:/dev/sdb上现有的磁盘标签将被销毁这个磁盘上的所有数据都将丢失。你想继续吗?
Yes/No? yes                   
#输入yes继续,我的硬盘有gpt分区表才会提示,如果是新的磁盘不会提示
(parted) p
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos              
#分区表已经改成MBR
Disk Flags:
​
Number   Start  End    Size   Type   File system    Flags

新建MBR分区

#新建第一个分区,MBR磁盘标签不支持分区名下面不会有输入选项
(parted) mkpart                  
Partition type? primary/extended? primary       
#新建主分区还是扩展分区
File system type? [ext2]? ext4             
#分区的文件系统类型
Start? 0%                      
#起始位置
End? 1G                      
#结束位置
(parted) mkpart primary 1G 2G            
#不进行交互直接创建主分区,不创建文件系统,
(parted) mkpart extended 2G 100%          
#直接创建扩展分区,不进行交互
(parted) p
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
​
Number   Start      End     Size    Type   File system    Flags
1       1049kB    1000MB   999MB    primary    ext4     lba           # 新建的主分区
2       1000MB    2000MB   999MB   primary           lba           # 新建的主分区
3        2000MB    5369MB    3369MB    extended          lba            # 新建的扩展分区
​
(parted) mkpart                 
# 继续创建逻辑分区
Partition type? primary/logical? logical      
# 新建主分区还是逻辑分区,只有创建了扩展分区才会出现逻辑分区的选项,输入logical
File system type? [ext2]? ext4
Start? 2G
End? 3G
(parted) mkpart logical ext4 3G 4G        
# 直接创建逻辑分区同时格式化
(parted) p
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
​
Number    Start     End    Size    Type    File system    Flags
1       1049kB   1000MB   999MB   primary
2      1000MB    2000MB  999MB   primary
3        2000MB   5369MB   3369MB  extended         lba
5        2001MB     3000MB  999MB   logical   ext4       lba   
# 逻辑分区成功分区号从5开始
6       3001MB    4000MB   999MB    logical   ext4      lba
# 其他的操作和gpt分区下一样这里就不说了

5.手动利用硬盘swap分区

1)创建swap分区

# 新建一个主分区。
~]# fdisk /dev/vdb
Command (m for help): n
Command action
p   primary (1 primary, 0 extended, 3 free)
e   extended
Select (default p): p
Partition number (1-4): 1
First cylinder (1-2610, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +1G
​
Command (m for help): t  #更改分区类型
Selected partition 1     #选择分区
Hex code (type L to list codes): 82
# 类型id,这里82对应swap类型分区
Changed system type of partition 1 to 82 (Linux swap / Solaris)
​
Command (m for help): p
Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         132     1060258+  82  Linux swap / Solaris

2)格式化

~]# mkswap /dev/sdb1
Setting up swapspace version 1, size = 1060252 KiB
no label, UUID=e210e3c6-9ad7-4b33-88b3-74234159c794

3)使用 swap 分区

#先查看系统swap分区大小
~]# free -htotal       used       free     shared    buffers     cached
Mem:          474M       140M       333M       236K        11M        46M
-/+ buffers/cache:        83M       391M
Swap:         1.9G         0B       1.9G
​
#启动我们刚才添加的分区
~]# swapon /dev/sdb1
​
#再次查看
~]# free -htotal       used       free     shared    buffers     cached
Mem:  474M        141M       333M       236K        11M        46M
-/+ buffers/cache:        83M       390M
Swap: 2.9G        0B         2.9G
​
# 分区类型  总大小  已用大小    剩余大小    ....         缓存       缓冲

4)取消使用

~]# swapoff /dev/sdb1

5)自动挂载

~]# vim /etc/fstab
/dev/sdb1         swap                    swap    defaults        0 0

6.利用文件方式swap分区

# 生成较大的文件
dd if=数据的源头 of=生成的文件 bs=每次读写数据的大小 count=次数 /dev/zero:拥有无限的数据
~]# dd if=/dev/dd if=/dev/zero of=swapfile bs=1M count=1024
~]# ls -lh /root/swapfile
-rw-r--r--. 1 root root 1.0G Aug 31 09:50 /root/swapfile
​
# 格式化交换文件
mkswap [生成的文件](of)
~]# mkswap /root/swapfile
​
# 挂载分区
swapon [格式的交换的文件]
]# swapon  /root/swapfile
​
# 更改交换文件权限
chmod 600(u-x,o-x) 交换文件
~]# chmod 600 /root/swapfile
​
# 自动挂载
~]# vi /etc/fstab
.....
/root/swapfile  swap    swap    defaults    pri=1000   0
​
# 查看交换分区组成的成员
swapon -s或查看交换空间的大小free -h
~]# swapon -s
/root/swapfile   file           1048572    0     100
​
## 删除swap分区;取消激活swap分区>>删除配置信息>>删除文件
# 取消激活swap分区
swapoff [格式的交换的文件]
~]# swapoff /root/swapfile
​
# 删除文件
~]# rm -f /root/swapfile 

查看基本信息

# 查看本机所有磁盘
~]# lsblk
# 查看磁盘uuid及格式化模式(type)
~]# blkid
#查看所有挂载点(+a则是查看所有)
~]# df -h
# 刷新分区表
~]# Partprobe
# 查看内存
~]# free -h

十五.高阶文件系统管理

1.磁盘配额

1)磁盘配额的概述

Linux根分区的磁盘空间耗尽时,Linux将无法再创建新的文件,从而导致服务程序崩溃,系统无法启动等故障现象,为了避免上述现象设置磁盘配置可以防止个别用户恶意或无意间占用大量磁盘空间,从而保证系统存储空间的稳定性和持续可用性,下面为大家分享一下Linux系统设置磁盘配额具体方法。

需要的RPM包:quota

磁盘配额的作用:在RHEL6系统中,内核已经制定了支持Linux文件系统的磁盘配额功能,而且在系统中默认安装了quota软件包,用于配置和管理磁盘配额。

但是在RHEL7中需要安装,主要用于可以设置启用磁盘配额功能,对用户在指定文件系统(分区)中使用的磁盘空间、文件数量进行设置,以防止个别用户恶意或无意间占用大量磁盘空间,从而保持系统存储空间的稳定性和持续可用性。

2)磁盘配额的条件

## 内核必须支持磁盘配额(/boot/config-3.10.0-1127.19.1.el7.x86_64)
~]# grep CONFIG_QUOTA /boot/config-3.10.0-1127.19.1.el7.x86_64
CONFIG_QUOTA=y
CONFIG_QUOTA_NETLINK_INTERFACE=y
# CONFIG_QUOTA_DEBUG is not set
CONFIG_QUOTA_TREE=y
CONFIG_QUOTACTL=y
CONFIG_QUOTACTL_COMPAT=y
​
## 查看系统中是否安装了quota工具,linux默认安装
~]# rpm -qa | grep quota
quota-nls-4.01-19.el7.noarch

3)概念

  • 用户配额和组配额

  • 磁盘容量限制和文件个数限制

  • 软限制和硬限制

  • 宽限时间

如果用户的空间占用数处于软限制和硬限制之间,统会在用户登录时警告用户磁盘将满,这个时间就是宽限时间,默认7天。如果达到宽限时间,用户的磁盘占用量还是超过软限制,那么软限制将升级为硬限制(一般组配额没用,因为是先到先得的)

4)磁盘配额规划

我们开始磁盘配额实验,首先我们来规划下我们的实验:

✧磁盘配额是限制的普通用户在分区上使用磁盘空间和文件个数的,所以我们需要指定-一个分区。那么我们手工建立一个5GB的/dev/sdb1分区,把它挂载到/disk目录当中。

✧还有我们需要建立被限制的用户和用户组。那么我们假设需要限制user1、 user2 和user3用户,这三个用户属于test用户组。

✧其中test组磁盘容量硬限制为500MB, 软限制450MB, 文件个数不做限制。user1用户为了便于测试,磁盘容量硬限制为50MB,软限制为40MB,文件个数硬限制限制为10个,软限制为8个。user2和user3用户磁盘容量硬限制为250MB,软限制为200MB,文件个数不做限制。

✧大家发现userl、user2和user3用户加起来的磁盘容量限制为550MB, 超过了test组的磁盘容量限制500MB。 这样的话,某个用户可能达不到自己的用户限制,而达到组限制时就不能再写入数据了。也就是说,如果用户限制和组限制同时存在,那么哪个限制更小,哪个限-制优先生效。

✧系统宽限时间我们改为8天。

5)磁盘配额示例

1.分5GB的/dev/sdb1分区,并将它挂载到/disk目录当中

2.建立需要做限制的用户和用户组

# 分区挂载
~]# fdisk /dev/sdb
~]# mkfs.xfs -f /dev/sdb1
~]# mkdir /disk
~]# mount /dev/sdb1 /disk
# 创建组
~]# groupadd test
# 创建用户
~]# useradd -G test userl
~]# useradd -G test user2
~]# useradd -G test user3
~]# passwd user1
~]# passwd user2
~]# passwd user3

3.在分区上开启磁盘配额功能

~ ]# mount -o remount, usrquota, grpquota /disk
# 重新挂载/disk分区,并加入用户和用户组的磁盘配额功能
​
# 我们要想永久生效,则需要修改/etc/fstab文件usrquota,grpquota(用户,组)
~]# vi /etc/fstab
.......
dev/sdb1  /disk  ext4     defaults,usrquota,grpquota  0 0
#修改配置文件如果想要生效,必须重启系统,否则也 需要把分区重新挂载遍

4.建立磁盘配额的配置文件

# 格式:
~]# quotacheck [选项] [分区名]# 选项
-a:  # 扫描/etc/mtab文件中所有启用磁盘配额功能的分区。如果加入此参数,命令后面就不需要加入分区名了
-c:  # 不管原有的配置文件,重新扫描并建立新的配置文件
-u:  # 建立用户配额的配置文件,也就是生成aquota. user文件
-g:  # 建立组配额的配置文件,会生成aquota. group文件
-v:  # 显示扫描过程
-m:  # 强制以读写的方式扫描文件系统,和-M类似。7般扫描根分区时使用。
-f:  # 强制扫描文件系统,并写入新的配置文件。7般扫描新添加的硬盘分区时使用
​
## 需要关闭SELinux,否则会报错
# 临时更改(后续有介绍)
~]# setenforce 0
~]# getenforce
Disabled
​
# 扫描磁盘的用户使用状况,并产生重要的aquota.group与aquota.user
~]# quotacheck -avug
# 查看文件是否存在
~]# ll /disk/
总用量24
-rw------- 1 root root 6144 10月17 11:08 aquota. group
-rw------- 1 root root 6144 10月17 11:08 aquota. user
​
​
#/disk目录中两个配额配置文件已经建立如果需要给根分区开启配额功能,需要:
~]# vi /etc/fstab
UUID=c2ca6f57-b15c-43ea-bca0-f239083d8bd2 / ext4 defaults,usrquota,grpquota 1 1
​
#开启/分区的配额功能
~]# mount -o remount /
​
#重新挂载/分区
~]# quotacheck -avugm
​
# 如果我们自动扫描/分区建立配额配置文件时,因为/分区已经挂载成读写系统,而quotacheck需要把分区先挂载成只读分区,然后建立配置文件,最后再挂载回来,所以不能直接在/分区建立配置文件。这时就需要使用-m强一致以读写的方式扫描文件系统

5.设置用户和组的配额限制

# 格式
~]# edquota [选项] [用户 名或组名]
# 选项:
-u用户名:  # 设定用户配额
-g组名:    # 设定组配额
-t:       # 设定宽限时间
-p:       # 复制配额限制。如果已经设定好某个用户的配额限制,其他用户的配额限制如果和这个用户相同,那么可以直接复制配额限制,而不用都手工指定
​
# 我们给userl用户设定的配额限制是:磁盘空间软限制是40MB,硬限制是50MB;文件个数的软限制是8个,硬限制是10个(稍微小一点,一会测试时方便测试)。命令如下:
~]# edquota -u user1   (不用再加分区了,因为在永久挂载中已经设定)
#edquota命令进入之后,就是标准的vi操作方法
disk quotas for user userl (uid 500):
#磁盘配额是设定用户user1 (UID 是500)
Filesystem     blocks  soft   hard   inodes   soft   hard
/dev/sdb1      0       0      0      0        0      0
#分区名         # 中间三项为block存储数(第一项系统会默认,不能修改)     # 后面三项是inode数(第一项系统会默认,不能修改)
# 修改
Disk quotas for user userl (uid 500) :
Filesystem    blocks   soft   hard   inodes   soft    hard
dev/sdb1      0        40000  50000  0        8       10
#不用对齐,是七列就行

6.配额复制

user3用户的配额值和user2用户完全样,我们就可以使用user2用户作为模板进行复制。这样我们如果需要建立大量的配额值- -致的用户时就会非常方便,不用一个个手工建立了。复制命令如下:

~]# edquota p user2 -u user3
#命令 -p 源用户-u 目标用户

7.修改宽限时间

我们要求把宽限时间改为8天,修改命令如下:

~]# edquota - t
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
Filesystem  Block grace period   Inode grace period
/dev/sdbl    8days                8days
#分区名       容量的宽限时间         个数的宽限时间

8.启动和关闭配额

配额的配置完成,接下来只需要启动配额就大功告成了,启动命令如下:

~]# quotaon [选项] [分区 名]
​
# 选项:
-a: 依据/etc/mtab文件启动所有的配额分区。如果不加-a,后面就一定要指定分区名
-u: 启动用户配额
-g: 启动组配额
-v: 显示启动过程的信息
​
​
~]# quotaon -vug /disk/ /dev/sdb1
[/disk]: group quotas turned on/dev/sdb1 [/disk]: user quotas turned ol
​
#启动/disk分区的配额
~]# quotaon -avug## 这条命令也可以关闭配额的命令如下:~]# repquota [选项] [分区名]
# 选项:
- a: 依据/etc/mtab文件查询配额。如果不加a选项,就一定要加分区名
-u: 查询用户配额
-g: 查询组配额
-v: 显示详细信息
-s: 以习惯单位显示容量大小
​
~]# repquota - augvs

9.测试

# 切换用户测试
~]$ dd  if=/dev/zero of=/disk/testfile bs=1M count=60
#建立testfile文件,指定大小60MB,如果没有权限,则把这个文件所有者设置为该用户

10.非交互设定用户磁盘配额

# 格式:
~]# setquota -u 用户名 容量软限制 容量硬限制 个数软限制    \    个数硬限制 分区名
​
# 示例
~] # useradd user4
~]# passwd user4
​
#建立用户
~]# setquota -u user4 10000 20000 5 8 /disk
#设定用户在/disk分区的容量软限制为10MB,硬限制20MB。文件个数软限制5个,硬限制#8 个

2.逻辑卷

1)LVM介绍

LVM 是 Logical Volume Manager 的简称,中文就是逻辑卷管理。(可以支持储存卷的扩展与收缩)

  • 物理卷(PV,Physical Volume):就是真正的物理硬盘或分区。

  • 卷组(VG,Volume Group):将多个物理卷合起来就组成了卷组,组成同一个卷组的物理卷 可以是同一个硬盘的不同分区,也可以是不同硬盘上的不同分区。我们可以把卷组想象为一 个逻辑硬盘

  • 逻辑卷(LV,Logical Volume):卷组是一个逻辑硬盘,硬盘必须分区之后才能使用,这个分区我们称作逻辑卷。逻辑卷可以格式化和写入数据。我们可以把逻辑卷想象成 为分区。

  • 物理扩展(PE,Physical Extend):PE 是用来保存数据的最小单元,我们的数据实际上都 是写入 PE 当中,PE 的大小是可以配置的,默认是 4MB。

2) 建立 LVM 的步骤

  • 首先需要把物理硬盘分成分区,当然也可以是整块物理硬盘。

  • 然后把物理分区建立成为物理卷(PV),也可以直接把整块硬盘都建立为物理卷。

  • 接下来把物理卷整合成为卷组(VG)。卷组就已经可以动态的调整大小了,可以把物理分区加入卷组,也可以把物理分区从卷组中删除。

  • 最后就是把卷组再划分成为逻辑卷(LV),当然逻辑卷也是可以直接调整大小的。我们说逻 辑卷可以想象成为分区,所以也需要格式化和挂载。

3)物理卷管理

分区

创建方式就是使用 fdisk 交互命令,不过需要注意的是分区的系统 ID 不再是 Linux 默认的分区 ID 号 83 了,而要改成 LVM 的 ID 号 8e

# 先分区
~]# fdisk /dev/sdb
# 分完区之后不要退出
t>>1>>8e>> t>>2>>8e>> t>>3>>8e
Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    10487807     5242880   8e  Linux LVM
/dev/sdb2        10487808    14682111     2097152   8e  Linux LVM
/dev/sdb3        14682112    20973567     3145728   8e  Linux LVM
# 如果fdisk -l 看不了分区就要刷新一下分区partprobe /dev/sdb或者重启

建立PV

建立物理卷时,我们说即可以把整块硬盘都建立成物理卷,也可以把某个分区建立成物理卷。如果要把整块硬盘都建立成物理卷,命令如下

~]# pvcreate [设备文件名]
~]# pvcreate /dev/sdb1Physical volume "/dev/sdb1" successfully created.
~]# pvcreate /dev/sdb2Physical volume "/dev/sdb2" successfully created.
~]# pvcreate /dev/sdb3Physical volume "/dev/sdb3" successfully created.
# 或者
~]# pvcreate /dev/sdb
# 注在centos7的pv操作可以乎略不做直接创建卷组

查询PV

1)pvscan

~]# pvscan PV /dev/sdb3                      lvm2 [3.00 GiB]PV /dev/sdb2                      lvm2 [2.00 GiB]PV /dev/sdb1                      lvm2 [5.00 GiB]Total: 4 [<29.00 GiB] / in use: 1 [<19.00 GiB] / in no VG: 3 [10.00 GiB]

2)pvdisplay

~]# pvdisplay
"/dev/sdb1" is a new physical volume of "5.00 GiB"--- NEW Physical volume ---PV Name               /dev/sdb1  # 物理卷名VG Name                          # 所属卷组名PV Size               5.00 GiB   # 物理卷大小Allocatable           NO         # 是否已经分配PE Size               0          # PE大小Total PE              0          # 总共PEFree PE               0          # 空闲PE数Allocated PE          0          # 可分配PEPV UUID               3TGUYI-7y28-ilGh-uNus-FJfZ-3mn2-a1E2MM  UUID

删除物理卷

~]# pvremove /dev/sdb3 

4)卷组管理

建立卷组

~]# vgcreate [选项] 卷组名 物理卷名
# 选项:
-s PE 大小: 指定 PE 的大小,单位可以是 MB,GB,TB 等。如果不写默认 PE 大小事 4MB () 

我们有三个物理卷/dev/sdb1-3,我们先把/dev/sdb1 和/dev/sdb2 加入卷组,留着/dev/sdb3 进行调整卷组大小实验

# 第一种写法
~]# vgcreate  2Mb  vg1 /dev/sb1 /dev/sdb2
​
# 第二种写法
~]# vgcreate -s 2Mb  vg1 /dev/sb1 /dev/sdb2
​
# 第三种写法(创建多少给pe,比如一个pe是4mb那么创建两个就是8mb)
~]# vgcreate -s 2 vg1 /dev/sb1 /dev/sdb2

查看卷组

# vgscan
~]# vgscan简要信息Reading volume groups from cache.Found volume group "vg1" using metadata type lvm2
​
# vgdisplay详细信息
~]# vgdisplay--- Volume group ---VG Name               vg1   # 卷组名System ID             Format                lvm2Metadata Areas        2  Metadata Sequence No  1VG Access             read/write  # 卷组访问权限VG Status             resizable   # 卷组访问状态MAX LV                0Cur LV                0Open LV               0Max PV                0Cur PV                2         # 当前物理卷数目Act PV                2VG Size               <7.00 GiB  # 卷组大小PE Size               2.00 MiB   # E大小Total PE              3582       # 总共PE数Alloc PE / Size       0 / 0   Free  PE / Size       3582 / <7.00 GiB  # 空闲PE数VG UUID               nffn4l-fnbY-n6ar-zy7v-PgKP-guw2-TTTOHz

删除卷组

~]# vgremove vg1

增加卷组容量

~]# vgextend  vg1 /dev/sdb3Volume group "vg1" successfully extended

减少卷组容量

~]# vgreduce vg1 /dev/sdb3 或 vgreduce scvg /dev/sdb3Removed "/dev/sdb3" from volume group "vg1"
~]# vgreduce -a # 删除所有没有使用的物理卷
# 不建议减少容量,如果里面有数据的话会丢失

5)逻辑卷管理

建立逻辑卷

~]# lvcreate [选项] [-n 逻辑卷名] 卷组名
# 选项:
-L 容量:指定逻辑卷大小,单位 MB,GB,TB 等
-l 个数:按照 PE 个数指定逻辑卷大小
-n 逻辑卷名:指定逻辑卷名
​
# 建立一个2G的逻辑卷
~]# lvcreate -L 2G -n lv1  vg1 Logical volume "lv1" created.
# 建立100个pe,每个pe4MB
~]# lvcreate -l 100 -n lv2  vg1 

vg1 卷组中建立 2GB 的 lv1逻辑卷之后,还要格式化和挂载之后逻辑卷才能正常使用。格式化和挂载命令和操作普通 分区时是一样的,不过需要注意的是逻辑卷的设备文件名是/dev/卷组名/逻辑卷名, 例子:

查看逻辑卷

# lvscan 查看简要信息
~]# lvscanACTIVE            '/dev/centos/swap' [2.00 GiB] inheritACTIVE            '/dev/centos/root' [<17.00 GiB] inheritACTIVE            '/dev/vg1/lv1' [2.00 GiB] inherit
# lvdisplay详细信息
~]# lvdisplay
LV Path                /dev/vg1/lv1LV Name                lv1VG Name                vg1LV UUID                jGYU0t-hEzP-BgNw-TgdT-iXDU-oqwt-S2KjT8LV Write Access        read/writeLV Creation host, time localhost.localdomain, 2019-12-05 22:19:48 -0500LV Status              available# open                 1LV Size                2.00 GiBCurrent LE             1024Segments               1Allocation             inheritRead ahead sectors     auto- currently set to     8192Block device           253:2

调整逻辑卷大小

~]# lvresize [选项] 逻辑卷设备文件名
# 选项:
-L 容量:安装容量调整大小,单位 KB,GB,TB 等。使用+代表增加空间,-号代表减少空间。如果直接写容量,代表设定逻辑卷大小为指定大小。
-l 个数:按照 PE 个数调整逻辑卷大小
​
#调整/dev/vg1/lv1 大小为3G
~]# lvresize -L +1G /dev/vg1/lv1Size of logical volume vg1/lv1 changed from 2.00 GiB (1024 extents) to 3.00 GiB (1536 extents).Logical volume vg1/lv1 successfully resized.
​
# 查看
~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/vg1-lv1      2.0G  6.0M  1.8G   1% /lv1
​
#但是此时大小还是没有变化怎么,刚刚只是逻辑卷的大小改变了,如果需要让分区使用这个新逻辑卷,我们还要使用 resize2fs 命令来调整分区的大小。不过这里就体现了 LVM 的优势,我们不需要卸载分区,直接就能调整分区的大小。
​
~]# resize2fs [选项] [设备文件名] [调整的大小]
# 选项:  -f: 强制调整
# 设备文件名:指定调整哪个分区的大小  调整的大小:指定把分区调整到多大,要加 M,G 等单位。如果不加大小,会使用整个分区
​
~]# resize2fs -f /dev/vg1/lv1
resize2fs 1.42.9 (28-Dec-2013)
The filesystem is already 786432 blocks long.  Nothing to do! 

删除逻辑卷

注: 想要删除逻辑卷,需要先取消挂载

~]# lvremove 逻辑卷设备文件名
~]# umount /dev/vg1/lv1
~]# lvremove /dev/vg1/lv1 

3.RAID磁盘整列

软的没有任何意义,阵列卡才有用

RAID的创建有两种方式:软RAID(通过操作系统软件来实现)和硬RAID(使用硬件阵列卡);在企业中用的最多的是:raid1、raid5和raid10。不过随着云的高速发展,阿里云,腾讯云等供应商一般可以把硬件问题解决掉。(你在用云的时候,会关注供应商底层是用什么raid类型吗)

1)磁盘阵列概述

磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意。

磁盘阵列是由很多块独立的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。

磁盘阵列还能利用同位检查(Parity Check)的观念,当数据中任意一个硬盘发生故障时,仍可读出数据。在数据重构时,可将数据经计算后重新置入新硬盘中。

2)RAID几种常见的类型

级别 说明 磁盘个数 使用率 优缺点
RAID0 条带卷 2+ 100% 读写速度快,不容错
RAID1 镜像卷 2 50% 写速度一般,读速度提升,容错
RAID5 带奇偶校验的条带卷 3+ (n-1)/n 读写速度快,容错,允许坏一块盘
RAID6 带奇偶校验的条带集,双校验 4+ (n-2)/n 读写快,容错,允许坏两块盘
RAID10 RAID1的安全+RAID0的高速 4 50% 读写速度快,容错
RAID50 RAID5的安全+RAID0的高速 6 (n-2)/n 读写速度快,容错

3)RAID的种类概述

1)RAID-0的工作原理

条带 (strping),也是我们最早出现的RAID模式

需磁盘数量:2块以上(大小最好相同),是组建磁盘阵列中最简单的一种形式,只需要2块以上的硬盘即可.

特点:成本低,可以提高整个磁盘的性能和吞吐量。RAID 0没有提供冗余或错误修复能力,速度快.

任何一个磁盘的损坏将损坏全部数据;磁盘利用率为100%

2)RAID-1

mirroring(镜像卷),需要磁盘两块以上

原理:是把一个磁盘的数据镜像到另一个磁盘上,也就是说数据在写入一块磁盘的同时,会在另一块闲置的磁盘上生成镜像文件,(同步)

RAID 1 mirroring(镜像卷),至少需要两块硬盘,raid大小等于两个raid分区中最小的容量(最好将分区大小分为一样),数据有冗余,在存储时同时写入两块硬盘,实现了数据备份;

磁盘利用率为50%,即2块100G的磁盘构成RAID1只能提供100G的可用空间

3)RAID-5

需要三块或以上硬盘,可以提供热备盘实现故障的恢复;只损坏一块,没有问题。但如果同时损坏两块磁盘,则数据将都会损坏。 空间利用率: (n-1)/n 2/3

奇偶校验信息的作用:

当RAID5的一个磁盘数据发生损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。

4)RAID-10

嵌套RAID级别,RAID-10镜像+条带

RAID 10是将镜像和条带进行两级组合的RAID级别,第一级是RAID1镜像对,第二级为RAID 0。比如我们有8块盘,它是先两两做镜像,形成了新的4块盘,然后对这4块盘做RAID0;当RAID10有一个硬盘受损其余硬盘会继续工作,这个时候受影响的硬盘只有2块

RAID硬盘失效处理

一般两种处理方法:热备和热插拔

热备:HotSpare

定义:当冗余的RAID组中某个硬盘失效时,在不干扰当前RAID系统的正常使用的情况下,用RAID系统中另外一个正常的备用硬盘自动顶替失效硬盘,及时保证RAID系统的冗余性(就像汽车上的备胎)

全局式:备用硬盘为系统中所有的冗余RAID组共享 (多个汽车一个备胎)

专用式:备用硬盘为系统中某一组冗余RAID组专用 (一个汽车一个备胎)

热插拔:HotSwap

定义:在不影响系统正常运转的情况下,用正常的物理硬盘替换RAID系统中失效硬盘。(灯变红了,有硬盘失效了,直接拔掉,插上一块新的,服务器要支持热插拔HotSwap)

5)RAID-0-1-5-10

搭建及使用-删除RAID及注意事项

RAID的实现方式

互动:我们做硬件RAID,是在装系统前还是之后?

答:先做阵列才装系统 ,一般服务器启动时,有显示进入配置Riad的提示,比如:按下CTRL+L/H/M进入配置raid界面

硬RAID:需要RAID卡,我们的磁盘是接在RAID卡的,由它统一管理和控制。数据也由它来进行分配和维护;它有自己的cpu,处理速度快

4)软RAID创建raid0与运用

1)安装服务命令

~]#yum -y install mdadm
~]# mdadm -C -v /dev/md0 -l 0 -n 2 /dev/sdb /dev/sdc-C 创建 -v 详细信息 -l阵列级别 -n 阵列成员数量mdadm: chunk size defaults to 512K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.~]# mdadm -Ds
-D 打印阵列设备详细信息 s得到阵列缺失信息

2) 查看阵列信息

​~]# mdadm -Ds
ARRAY /dev/md0 metadata=1.2 name=http://xuegod63.cn:0 UUID=cadf4f55:226ef97d:565eaba5:3a3c7da4~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu May 17 15:59:16 2018
Raid Level : raid0
Array Size : 41910272 (39.97 GiB 42.92 GB)39.97按照1024计算,42.92按照1000计算Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Thu May 17 15:59:16 2018
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Chunk Size : 512K #chunk是raid中最小的存储单位
Consistency Policy : none
Name : http://xuegod63.cn:0 (local to host http://xuegod63.cn)
UUID : cadf4f55:226ef97d:565eaba5:3a3c7da4
Events : 0
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
active sync:动态同步#保存配置信息
~]# mdadm -Dsv > /etc/mdadm.conf
#从内存中查看,重启后,信息丢失,所以要保存
~]# cat /proc/mdstat

3)对创建的RAID0进行文件系统创建并挂载

~]# mkfs.xfs /dev/md0
~]# mkdir /raid0
~]# mount /dev/md0 /raid0/
~]# df -Th /raid0/
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/md0 xfs 40G 33M 40G 1% /raid0~]# echo 324 > /raid0/a.txt

4)开机自动挂载

~]# blkid /dev/md0
/dev/md0: UUID="3bf9c260-dc7b-4e37-a865-a8caa21ddf2c" TYPE="xfs"~]# echo "UUID=5bba0862-c4a2-44ad-a78f-367f387ad001 /raid0 xfs defaults 0 0" >> /etc/fstab

5)软RAID创建RAID1与模拟错误

raid种类 磁盘 热备盘

raid1 sdd、sde sdf1

创建RAID1>>添加1个热备盘>>模拟磁盘故障,自动顶替故障盘>>从raid1中移出故障盘

1)创建RAID1

# 创建RAID1
~]# mdadm -C -v /dev/md1 -l 1 -n 2 -x 1 /dev/sd[d,e,f]-C 创建 -v 详细信息 -l阵列级别 -n 阵列成员数量 -x阵列备用盘数量# 将RADI信息保存到配置文件
~]# mdadm -Dsv > /etc/mdadm.conf# 查看 RAID 阵列信息
~]# mdadm -D /dev/md1
Raid Level : raid1
Array Size : 20955136 (19.98 GiB 21.46 GB)
....
Number Major Minor RaidDevice State
0 8 48 0 active sync /dev/sdd
1 8 64 1 active sync /dev/sde
2 8 80 - spare /dev/sdf
spare:备用# 在RAID设备上创建文件系统
~]# mkfs.xfs /dev/md1
~]# mkdir /raid1
~]# mount /dev/md1 /raid1/

2)准备测试文件

~]# cp /etc/passwd /raid1/

3)模拟损坏

## 下面模拟RAID1中数据盘/dev/sde出现故障,观察/dev/sdf备用盘能否自动顶替故障盘#先确定已经同步成功
~]# mdadm -D /dev/md1
Consistency Policy : resync# 将设备状态设为故障
~]# mdadm /dev/md1 -f /dev/sde
-f 将设备状态设为故障# 查看一下阵列状态信息
~]# mdadm -D /dev/md1
Number Major Minor RaidDevice State
0 8 48 0 active sync /dev/sdd
2 8 80 1 spare rebuilding /dev/sdf
1 8 64 - faulty /dev/sde
spare rebuilding              # 热备重建中,也就是 sdd会把自己的数据同步到sdf
rebuild Status : 13% complete # 同步状态 (此时md1中的文件依然正常使用,因为sdd在工作)
faulty                        # 错误

4)更新配置文件

~]# mdadm -Dsv > /etc/mdadm.conf-D 打印阵列设备详细信息 s得到阵列缺失信息 v# 查看数据是否丢失
~]# ls /raid1/ #数据正常,没有丢失
重要的数据如:数据库 ; 系统盘 (把系统安装到raid1的md1设备上,然后对md1做分区)

5)移除损坏的设备:

~]# mdadm -r /dev/md1 /dev/sde #-r 移除设备
mdadm: hot removed /dev/sde from /dev/md1# 查看信息:
~]# mdadm -D /dev/md1
Number Major Minor RaidDevice State
0 8 96 0 active sync /dev/sdd
2 8 128 1 active sync /dev/sdf#已经没有热备盘了,添加一块新热备盘。
~]# mdadm -a /dev/md1 /dev/sde
mdadm: added /dev/sde
#-a 添加设备到阵列

6)软RAID创建RAID5

raid 种类 磁盘 热备盘

raid5 sdg、sdh、sdi sdj

1)创建RAID5, 添加1个热备盘,指定chunk大小为32K

-x 指定阵列中备用盘的数量

-c或--chunk= 设定阵列的块chunk块大小 ,单位为KB (普通文件就默认就可以,如果存储大文件就调大些,如果存储小文件就调小些,这里chunk就类似簇,块一样的概念,是阵列的最小存储单位)

2)停止阵列,重新激活阵列

3)使用热备盘,扩展阵列容量,从3个磁盘扩展到4个

# 创建RAID-5
~]# mdadm -C -v /dev/md5 -l 5 -n 3 -x 1 -c 32 /dev/sd{g,h,i,j}
~]# mdadm -D /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Thu May 17 18:54:20 2018
Raid Level : raid5
Array Size : 41910272 (39.97 GiB 42.92 GB)
Used Dev Size : 20955136 (19.98 GiB 21.46 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Thu May 17 18:54:31 2018
State : clean, degraded, recovering
Active Devices : 2
Working Devices : 4
Failed Devices : 0
Spare Devices : 2
Layout : left-symmetric
Chunk Size : 32K
Consistency Policy : resync
Rebuild Status : 7% complete #同步状态,同步完,此行消失。
Name : http://xuegod63.cn:5 (local to host http://xuegod63.cn)
UUID : fa685cea:38778d6a:0eb2c670:07ec5797
Events : 2
Number Major Minor RaidDevice State
0 8 96 0 active sync /dev/sdg
1 8 112 1 active sync /dev/sdh
4 8 128 2 spare rebuilding /dev/sdi
3 8 144 - spare /dev/sdj #热备盘

(2) 扩展RAID5磁盘阵列

# 将热备盘增加到md5中,使用md5中可以使用的磁盘数量为4块
/]# mdadm -G /dev/md5 -n 4 -c 32
-G或--grow 改变阵列大小或形态~]# mdadm -Dsv > /etc/mdadm.conf #保存配置文件备注:阵列只有在正常状态下,才能扩容,降级及重构时不允许扩容。对于raid5来说,只能增加成员盘,不能减少。而对于raid1来说,可以增加成员盘,也可以减少。~]# mdadm -D /dev/md5 #查看状态
.....
Array Size : 41910272 (39.97 GiB 42.92 GB)
#发现新增加硬盘后空间没有变大,为什么?
Used Dev Size : 20955136 (19.98 GiB 21.46 GB)
.....
Reshape Status : 3% complete#重塑状态:3%完成 ,等到100%, 数据才同步完,同步完后会变成成:Consistency Policy : resync #一致性策略:再同步,表示已经同步完
.....
Number Major Minor RaidDevice State
0 8 96 0 active sync /dev/sdg
1 8 112 1 active sync /dev/sdh
4 8 128 2 active sync /dev/sdi
3 8 144 3 active sync /dev/sdj
# 等一会,等所有数据同步完成后,查看md5空间大小:
Array Size : 62865408 (59.95 GiB 64.37 GB) #空间已经变大
Used Dev Size : 20955136 (19.98 GiB 21.46 GB)

(3) 停止MD5阵列

~]# mdadm -Dsv > /etc/mdadm.conf #停止前,一定要先保存配置文件
~]# mdadm -D /dev/md5 ##停止前,请确认数据已经同步完(同步不完成,有时会无法激活)
Consistency Policy : resync #数据已经同步完
~]# mdadm -S /dev/md5 #-S 停止阵列
mdadm: stopped /dev/md5

(4) 激活MD5阵列

#-A 激活磁盘阵列 s扫描配置文件得到阵列信息
~]# mdadm -As
mdadm: /dev/md5 has been started with 3 drives and 1 spare.

7)软RAID创建RAID10

raid10 分区:sdk1,sdk2,sdk3.sdk4

~]# fdisk /dev/sdk #分4个主分区,每个分区1G大小
~]# ls /dev/sdk*
~]# mdadm -C -v /dev/md10 -l 10 -n 4 /dev/sdk[1-4]
~]# cat /proc/mdstat# 删除RAID所有信息及注意事项
~]# umount /dev/md0 /raid0 #如果你已经挂载raid,就先卸载。
~]# mdadm -Ss #停止raid设备
~]# rm -rf /etc/mdadm.conf #删除raid配置文件
~]# mdadm --zero-superblock /dev/sdb#清除物理磁盘中的raid标识 ,MD超级块
~]# mdadm --zero-superblock /dev/sdc#清除物理磁盘中的raid标识 ,MD超级块
mdadm: Unrecognised md component device #代表已经擦除掉MD超级块,找不到raid标识的信息了,擦除MD超级快,执行两次会报这个信息。参数:--zero-superblock : #擦除设备中的MD超级块

8)硬RAID卡配置

服务器RAID卡配置

1)服务器加电开机

2)配置RAID-5

按键盘“↑↓”键选择“No Configuration Present”

按“F2”键-->“Create New VD”

按“回车”键-->“raid-5”

按“Tab”键(切换位置)-->按“空格键”选中磁盘

按“Tab”键(切换位置)-->输入虚拟磁盘大小与名字

按“Tab”键(切换位置)-->“OK”完成

9)初始化虚拟磁盘

按键盘“↑↓”键-->“ID:0  raid-5” -->按“F2”键-->“Initialization” -->“Fast Init”

初始化选择“YES”

初始化完成-->“OK”

结果验证

注:RAID可以预防数据丢失,但是它并不能完全保证你的数据不会丢失,所以大家使用RAID的同时还是注意备份重要的数据

十六.系统启动与引导修复

1.系统运行级别

1)linux系统共有七个运行级别

  • linux中可以使用runlevel来查看运行级别

~]# runlevel
N              3
上一个运行级别   当前运行级别 
  • 手动更改运行级别

~]# init 5
~]# runlevel
3 5

2)系统默认运行级别

系统默认运行级别,依赖于 /etc/inittab 文件

# 在6系统之前是这样的
~]# vim /etc/inittab
.....
# System initialization is started by /etc/init/rcS.conf
# 系统会先调用 /etc/init/rcS.conf
# Individual runlevels are started by /etc/init/rc.conf
# 再调用 /etc/init/rc.conf ,在不同的运行级别启动不同的服务
# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
# 通过这个配置文件判断 Ctrl+Alt+Delete 热启动键是否可用
# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in /etc/sysconfig/init.
# 判断系统可以启动的本地终端数量,及终端的基本设置(如颜色)
# For information on how to write upstart event handlers, or how
# upstart works, see init(5), init(8), and initctl(8).
#
# Default runlevel. The runlevels used are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:
# 这就是系统的默认运行级别,也就是系统开机后直接进入哪个运行级别,注意这里的默认运行级别只能写 3 或 5,其他的级别要不就是关机重启,要不就是保留或单用户, 都不能作为系统默认运行级别的。
​
​
## centos7之后呢
~]# cat /etc/inittab
# inittab is no longer used when using systemd.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
#
# To view current default target, run:
​
# systemctl get-default
# 查看默认运行级别的方式为
​
# To set a default target, run:
​
#设置默认运行级别的方式
# systemctl set-default TARGET.target
# 可以看到,里面除了注释,什么也没有,并没有centos6中设置默认运行级别的方式

七系列运行级别对应表

init级别 systemctl target
0 shutdown.target
1 emergency.target
2 rescure.target
3 multi-user.target
4
5 graphical.target
6
# 命令格式:
~]# systemctl [command] [unit.target]

3)/etc/rc.d/rc.local

  • 这个配置文件会在用户登陆之前读取,这个文件中写入什么命令,在每次系统启动时都会执行一次。也就是说,我如果有任何需要在系统启动就运行的工作,只需要写入/etc/rc.d/rc.local 这个配置文件即可。

~]# ll  /etc/rc.local
lrwxrwxrwx. 1 root root 13 Dec  2 23:15 /etc/rc.local -> rc.d/rc.local
# 该文件是 rc.d/rc.local 的软连接
​
#我们可以在文件中写下如下命令:
~]# vim /etc/rc.local
/etc/rc.d/init.d/httpd start
# 如果写入 RPM 包安装的 apache 的启动命令, apache 服务就会开机时自动启动了。

2.启动引导程序

早期的 Lilo 引导程序已经不是很常见了,grub 相比来讲有很多优势。如下:

  • 支持更多的文件系统

  • grub 的主程序可以直接在文件系统中查找内核文件;

  • 在系统启动时,可以 利用 grub 的交互界面编辑和修改启动选项

  • 可以动态的修改 grub 的配置文件,这样在修改配置文件之后不需要重新安装 grub,而只需要重新启动就可以生效了

# 系统加载内核
~]# ls /boot
symvers-3.10.0-1127.19.1.el7.x86_64.gz
​
# 系统源码内核~]# ls /usr/src/kernels/
3.10.0-1127.19.1.el7.x86_64

1 )/boot/grub 目录

/boot/grub2/grub.cfg (/etc/grub2.cfg 是/boot/grub2/grub.cfg 文件的符号链接) /etc/grub.d/ /etc/default/grub

这三个配置文件之间的关系是 grub.cfg 里通过 ####BEGIN ##### 这种格式按照顺序调用 /etc/grub.d 里面的脚本实现不同的功能。在 grub.d 目录里有很多数字开头的脚本,按从小到大的顺序执行。 ​ 例如:在 /etc/grub2.cfg 文件里调用 /etc/grub.d/10_linux 来配置不同内核,在这里有2个menuentry(菜单入口),所以我们开机的时候会看见两个默认选项,一个是普通模式,一个是救援模式。

/etc/default/grub 文件

和其他的脚本比较起来,非常简单直观了。后面会举例如何修改(需要注意的是,最好不要直接去修改 /etc/grub2.cfg 文件。这个是因为如果后期升级内核,所有的配置都会失效。如果需要自定义这个文件,我们可以修改对应的脚本或者 /etc/default/grub 文件,然后通过 grub2-mkconfig 重新生成 grub.cfg 文件。)我们可以修改grub配置文件来进行一些简单的配置。

修改启动等待时间

Centos7 默认启动等待时间为 5 秒,我们可以将其改为3秒(注意,如果改为-1,那么每次启动需要手动确认才可以) 修改 /etc/default/grub 文件,

修改完成后重新编译生成 grub.cfg 文件

对 grub 进行加密

在开机界面时如果输入e ,会打开编辑窗口,我们可以根据需要进入 rescue, emergency 或者 shell 模式。那么如何对 grub 进行加密呢?在 /etc/grub.d/00_header 文件的末尾,加入以下内容

其中,“EOF” 可以自己定义。然后重新定义编码文件

重启之后输入e,就需要用户和密码才能进入编辑窗口了。 上面我们设置的是明文密码。在 /etc/grub.d/00_header 文件内可以知道,那如何设置密文口令呢? 加密密码由命令 grub2-mkpasswd-pbkdf2 生成 将生成的密码符,添加到 /etc/grub.d/00_header 文件末尾

3系统修复模式

1)单用户模式

Linux 的单用户模式有些类似 Windows 的安全模式, 只启动最少的程序用于系统修复。在单用户模式(运行级别为 1)中,Linux 引导进入根 shell,网络被禁用,只有少数进程运行。单用户模式可以用来修改文件系统损坏、还原配置文件、移动用户数据等。 1)进入单用户模式

按 e 进入grup菜单,选择第二项,再按 e ,输入 空格1 回车 再按 b 启动

单用户模式常见的错误修复

# 遗忘 root 密码 这是管理员最容易犯的错误,那么应该如何修复呢?当然是使用单用户模式进行修复了,进入单用户模式最大的特点就是不需要输入用户名和密码就能登录。既然已经登录了单用户模式,那么直接 给 root 用户设定新密码即可。
进入单用户之后执行:
/]# passwd root# 修改系统默认运行级别 如果我们把系统的默认运行级别修改错误,比如改为了 0 或 6,系统就不能正常启动了。这时也可以利用单用户模式进行修复,只要直接修改默认运行级别配置文件/etc/inittab,把系统默认运行 级别修改回来即可。
进入单用户之后执行:
/]# vim /etc/inittab id:3:initdefault:

把默认运行级别修改为 3 或 5 。注意系统的默认运行级别只能使用 3 或 5 绝大多数系统错误都可以通过单用户模式进行修复,理论上是只要能够进入单用户模式,那么系统错误就可以被单用户模式修复。

2)盘修复模式

1)进入光盘修复模式 如何进入光盘修复模式呢首先你需要有系统光盘,或系统修复光盘。我们这里只需要把 CentOS 6.x 的第一张光盘放入光驱,然后重启系统。修改 BIOS 的启动顺序,让系统从光盘启动。下面的针对的是虚拟机。

2)光盘修复模式常见的错误修复

我们在光盘修复模式中主要可以修复什么错误呢?其实能在单用户模式中修复的错误,都能在光盘修复模式中修复。当然还可以修复一些在单用户模式下无法修复的错误.

  • 重要系统文件丢失,导致系统无法启动 如果系统中的重要系统文件丢失,当然会导致系统无法正常启动。这时也可以利用光盘修复模式修复。我们假设把/etc/inittab 文件丢失了,我们通过系统启动过程知道这个文件是定义系统默认运行级别的,如果丢失了这个文件,系统当然不能正常启动,这时就需要进入光盘修复模式中了,然后需要利用 chroot 命令的作用是“change root directory”改变系统根目录的意思。也就是可以把根目录暂时移动到某个目录当中。我们是通过光盘启动的光盘修复模式,所以我们现在所在的根目录不是真正的系统根目录,而是光盘的模拟根目录。系统根目录被当成外来设备放在了/mnt/sysimage/目录中。 这时就需要 chroot 命令把我们现在的所在目录移动成真正的系统根目录。

# 改变主目录,发现有的时候已经是正常的根目录,就无需切换。
bash-4.1# chroot /mnt/sysimage
​
# 进入 root 目录。因为默认进入的是 / 目录,如果不进入 root ,一会提取的 inittab 文件会报错
sh-4.1# cd /root
​
# 查询下 /etc/inittab 文件属于哪个包,如果文件丢失,可以通过其他命令查询。或者上网查询。
sh-4.1# rpm -qf /etc/inittab initscripts-9.03.31-2.el6.centos.i686
​
# 建立挂载点
sh-4.1# mkdir /mnt/cdrom
​
# 挂载光盘
sh-4.1# mount /dev/sr0 /mnt/cdrom
​
# 提取 inittab 文件到当前目录
sh-4.1# rpm2cpio /mnt/cdrom/Packages/initscripts-9.03.31-2.el6.centos.i686.rpm |cpio -iduv ./etc/inittab
​
#复制 inittab 文件到指定位置
sh-4.1# cp etc/inittab /etc/inittab  

3)破解root密码

前提:必须是服务器的管理者,涉及重启服务器重启系统,

# 进入恢复模式(救援模式)
~]# reboot
# 在此界面按e键

找到linux16该行在linux16该行的最后,空格输入rd.breakconsole=tty0(请不要正常的开机,进入救援模式)

# 按ctrl + x启动,会看到如下
switch_root:/#
​
# 以可写方式重新挂载/sysroot,并切换到此环境
:/# mount -o remount,rw /sysroot
​
# 让目录下所有操作系统可以读写
:/#chroot /sysroot
​
# 切换环境,切换到硬盘操作系统的环境;重新设置root的密码
sh-4.2# echo 1 | passwd --stdin root
​
# 如果SELinu是强制模式,才需要重设SELinux策略(其他模式不需要做此操作)
sh-4.2# vim /etc/selinux/config
# 查看SELinux开机的运行模式
sh-4.2# touch /.autorelabel # 或让强制模式的SELinux失忆
​
# 强制重启系统完成修复
sh-4.2# reboot  -f
# 注: /etc/resolv.conf: 指定dns不用时可以关掉影响开机,ssh速度

十七.服务管理

windows查看启动方法,以及设置启动方法

1.服务的简介和分类

1)linux服务分类的思维架构图

2)RPM 包默认安装的服务的概述

这些服务是通过 RPM 包安装的,可以被服务管理命令识别。又分为两种子分类:

  • 1)独立的服务: 就是独立启动的意思,这类型的服务可以自行启动,而不用依赖其他的管理服务。不依赖其他管理服务,那么当客户端请求访问时,独立的服务响应请求更快速。 Linux 中目前大多数服务都是独立的服务,比如 apache 服务,FTP 服务,Samba 服务等。

  • 2)基于 xinetd 的服务: 这种服务就不能独立启动了,而是要依靠管理服务来调用这种服务。这个负责管理的服务就是 xinetd 服务,xinetd 服务是系统的超级守护进程。xinetd 服务的作用就是管理不能独立启动的服务,当有客户端请求时,先请求 xinetd 服务, 由 xinetd 服务去唤醒相对应的服务。当客户端请求结束后,被唤醒的服务会关闭并释放资源。这样做的好处是只需要持续启动 xinetd 服务,而其他基于 xinetd 的服务只有在需要时才启动,不会占用过的的服务器资源。但是这种服务由于在有客户端请求时才会被唤醒,所以相应时间相对较慢。(centos6开始已经没有了)

# 查看所有服务
~]# chkconfig
.....
netconsole      0:off   1:off   2:off   3:off   4:off   5:off   6:off
network         0:off   1:off   2:on    3:on    4:on    5:on    6:off
# 可以看到都是独立的服务,默认是没有安装xinetd服务的
​
# 安装xinetd
~]# yum -y install xinetd
# 查看所有自启动状态
~]# chkconfig
netconsole      0:off   1:off   2:off   3:off   4:off   5:off   6:off
network         0:off   1:off   2:on    3:on    4:on    5:on    6:off
# 此时可以看得到xinetd服务
xinetd based services:chargen-dgram:  offchargen-stream: offdaytime-dgram:  offdaytime-stream: offdiscard-dgram:  offdiscard-stream: offecho-dgram:     offecho-stream:    offtcpmux-server:  offtime-dgram:     offtime-stream:    off

3)RPM 包默认安装的服务管理

独立服务管理

独立服务的启动管理

(我们使用yum安装的apache服务进行演示)

  • 使用/etc/init.d/目录中的启动脚本启动服务

~]# /etc/init.d/httpd start
Starting httpd: httpd: apr_sockaddr_info_get() failed for centos
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName                [  OK  ]
  • 使用 service 命令来启动独立的服务

~]# service  独立服务名  start|stop|restart|…
​
# 示例
~]# service httpd start

独立服务的自启动管理

  • 第一种使用 chkconfig 服务自启动管理命令

~]# chkconfig [--level 运行级别] [独立服务名] [on|off]
#选项:
--level: # 设定在哪个运行级别中开机自启动(on),或是关闭自启动(off)
​
# 启动示例(可以不写2345,默认2345)
~]# chkconfig --level 2345 httpd on  
  • 第二种修改/etc/rc.d/rc.local 文件,设置服务自启动

~]# vi /etc/rc.d/rc.local
/etc/rc.d/init.d/httpd start 
  • 第三种使用 ntsysv 命令管理自启动,ntsysv是一个图形界面。

~]# ntsysv
上下键:# 在不同服务之间移动
空格键:# 选定或取消服务的自启动。
tab 键:# 在不同项目间切换(OK/退出)
F1 键: # 显示服务的说明

基于 xinetd 服务的管理(了解就可以了)

基于 xinetd 服务的启动

我们使用 telnet 服务来举例,telnet 服务是用来进程系统远程管理的,端口 23。不过需要注意的是 telnet 的远程管理数据在网络当中是明文传输,非常不安全。在实际生产环境中,不会使用,而且在centos七之后也不用xinetd启动了,我们这里只是举例而已。

~]# yum install telnet -y
~]# vim /etc/xinetd.d/telnet
service telnet
{flags           = REUSE   标志为REUSE,代表tcp/ip socket 可重用socket_type     = stream  使用tcp协议数据包wait            = no      允许多个连接同时连接user            = root     启动服务的用户为 rootserver          = /usr/sbin/in.telnetd   启动脚本log_on_failure  += USERID     登陆失败后,记录用户iddisable         = yes      默认服务不使用,我们如果要使用的话,需要将yes改为no
}
​
#启动telnet服务,使用chkconfig --list 查看
~]# /etc/xinetd.d/telnet start
~]# chkconfig --list
....
xinetd based services:chargen-dgram:  offchargen-stream: offdaytime-dgram:  offdaytime-stream: offdiscard-dgram:  offdiscard-stream: offecho-dgram:     offecho-stream:    offrsync:          offtcpmux-server:  offtelnet:         ontime-dgram:     offtime-stream:    off

基于 xientd 服务的自启动

  • 使用 chkconfig 命令管理自启动

  • 使用 ntsysv 命令管理自启动

~]# chkconfig 服务名 on|off
~]# chkconfig telnet on
​
# telnet 是基于 xinetd 的服务,没有自己的运行级别,是依靠 xinetd 服务的运行级别,所以不能添加 --level 参数

4)独立服务的启动脚本分析

# 既然独立的服努后幼是依靠/etc/init. d/httpd込个脚本来迸行后幼管理的,那幺込个脚本中到底是什幺祥子的?既然我伽己経学刃了shell 脚本,那幺我們就来学刃一下込个脚本到底是怎幺突現apache服各的管理的。
~]# vim /etc/init. d/httpd
#!/bin/bash
# httpd
Startup script for the Apache HTTP Server
# chkconfig: - 85 15
#自启动设定代表自启动級別, 85 (S85) 代表序号,15 (K15)代表字号。
​
# description: The Apache HTTP Server is an efficient and extensible \
​
server implementing the current HTTP standards.
#服各描述。以上apache自启动。
# processname: httpd
# config: /etc/httpd/ conf/httpd. conf
# config: /etc/ sysconfig/httpd

2.源码包安装的服务管理

源码包安装的服务

不能直接通过系统命令启动,但可以进行配置实现系统命令启动

# 源码包服务启动管理
]# /usr/local/apache/bin/apachectl start|stop|restart|… 

源码包服务的自启动管理

 # 修改自启动文件
~]# vi /etc/rc.d/rc.local
/usr/local/apache/bin/apachectl start 

让源码包服务被服务管理命令识别

安装源码包的 apache 服务

~]# tar -zxvf httpd-2.4.41.tar.gz
~]# cd httpd-2.4.41
#先安装依赖
~]# yum install pcre  gcc gcc-c++ expat-devel zlib
# 源码包 2.4.*版本中默认没有集成 apr 的依赖包,所以需要提前解决依赖问题,直接下载就行
~]# cp -a apr-1.7.0/ /root/httpd-2.4.41/srclib/apr
~]# cp -a apr-util-1.6.1 /root/httpd-2.4.41/srclib/apr-util
~]# ./configure --prefix=/usr/local/apache --sysconfdir=/usr/local/apache/etc --with-included-apr
~]# make && make install

启动apache服务

~]# /usr/local/apache/bin/apachectl start
~]# netstat -tlunp | grep 80
tcp        0      0 :::80                       :::*                        LISTEN      45839/httpd
# 启动源码包的 apache ,查看端口确定已经启动 

让源码包的 apache 服务能被 service 命令管理启动

~]# ln -s /usr/local/apache/bin/apachectl  /etc/init.d/apache
# service 命令其实只是在 /etc/init.d/ 目录中查找是否有服务的启动脚本,所以我们只需要做个软链接把源码包的启动脚本链接到 /etc/init.d/ 目录中,就能被 service 命令管理了。我把软链接文件起名为 apache ,不过注意这不是 RPM 包的 apache。
​
~]# service apache stop
# 虽然 RPM 包的 apache 被卸载,但是 service 命令也能够生效。

让源码包的 apache 服务能被 chkconfig 命令管理自启动

~]# vim /etc/init.d/apache
# 在其中添加如下两行
# chkconfig: 2345 88 88启动级别  启动顺序   关闭顺序  #任意,不与其他服务冲突就行
# description:  apache  chkconfig script描述信息         #任意
~]# chkconfig --add apache
# 让 chkconfig 命令能够管理源码包安装的 apache
~]# chkconfig --list | grep apache apache
~]# chkconfig --list |grep apache
apache          0:off   1:off   2:on    3:on    4:on    5:on    6:off
​
# 此时,已经可以使用chkconfig,管理apache自启动,并且启动级别,就是我们所写的。

让 ntsysv 命令可以管理源码包 apache

ntsysv 命令其实是和 chkconfig 命令使用同样的管理机制,也就是说 ntsysv 已经可以 进行源码包 apache 的自启动管理了。

chkconfig 添加与删除服务

# 格式
~]# chkconfig [选项] [服务名]
# 选项:
--add: 把服务加入 chkconfig 命令的管理
--del: 把服务从 chkconfig 命令的管理中删除 

3.linux中常见服务的作用

十八.系统管理

内存与CPU的合理占比(70/90),越接近越好,但是一般情况下在这个值之下

程序:静态没有执行的代码硬盘空间

进程:动态执行的代码CPU与内存资源

1.进程管理

windows进程查看

1)进程介绍

进程与程序

  • 进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体, 都有自己的地址空间,并占用一定的系统资源。

  • 程序是人使用计算机语言编写的 可以实现特定目标或解决特定问题的代码集合。

进程管理作用

  • 判断服务器健康状态:我们应该在服务器出现问题,但是还没有造成服务器宕机或停止服务时,就人为干预解决了问题。进程管理最主的工作就是判断服务器当前运行是否健康,是否需要人为干预。如果服务器的 CPU 占用率、内存占用率过高,就需要人为介入解决问题了。

  • 查看系统中所有的进程:我们需要查看系统中所有正在运行的进程,通过这些进程可以判断系统中运行了哪些服务,是否有非法服务运行。(如果有非法进程的话要先清除该进程对应文件,然后再杀死该进程)

  • 杀死进程:这是进程管理中最不常用的手段,只有当正确终止进程的手段失效的情况下,才使用强制手段杀死进程。

2)进程相关命令

ps命令

ps 命令使用 ps 命令是用来静态显示系统中进程的命令。不过这个命令有些特殊,它的部分命令的选项不能加 入“-”,比如命令“ps aux”,其中“aux”是选项,但是这个选项不能加入“-”。这是因为 ps 命令的部分选项需要遵守 BSD 操作系统的格式。所以 ps 命令的常用选项的组合是固定的。

# 选项:
a:  # 显示一个终端的所有进程,除了会话引线
u:  # 显示进程的归属用户及内存的使用情况
x:  # 显示没有控制终端的进程
-l: # 长格式显示。显示更加详细的信息
-e: # 显示所有进程,和-A 作用一致
~]# ps -aux  # 结果虽然一致,但是这里出现了警告信息,在centos7中已经解决了
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
ps输出信息解释~]# ps aux
# 显示当前终端所有进程(a)、当前用户在所有终端下的进程(x)、以用户格式输出(u)
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.2  0.3  19344  1536 ?        Ss   16:46   0:02 /sbin/init
​
USER    # 用户
PID     # 进程ID
%CPU    # cpu占有率
%MEN    # 内存占有率
VSZ     # 虚拟内存使用大小,单位为KB
RSS     # 真实内存使用大小
TTY     # 登录终端,其中 tty1-tty7 代表本地控制台终端(可以通过 alt+F1-F7 键切换不同的终端),tty1-tty6 是本地的字符界面终端,tty7 是图形终端。 # pts/0-255 代表虚拟终端,一般是远程连接的终端,第一个远程连接占用的是 pts/0 终端, 第二个远程连接占用 pts/1,依次增
STAT
D:# 不可被唤醒的睡眠状态,通常用于 I/O 情况
R:# 该进程正在运行
S:# 该进程在睡眠状态,可被唤醒
T:# 停止状态,可能是在后台暂停或进程在除错状态
W:# 内存交互状态(从 2.6 内核开始无效)
X:# 死掉的进程(应该不会出现)
Z:# 僵尸进程。进程已经终止,但是部分程序还在内存当中。
<:# 高优先级(以下状态在 BSD 格式当中出现)
N:# 低优先级
L:# 被锁入内存
s:# 包含子进程
l:# 多线程(小写 L)
+:# 位于后台
STRART  # 进程已启动时间
TIME    # 该进程占用cpu时间
COMMAND # 产生此进程的命令名
​
~]# ps -lef
# -elf:显示系统内所有进程(-e),以长格式输出(-l)信息、包括最完整的进程信息(-f)
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0      1      0  0  80   0 -  4836 poll_s ?        00:00:02 init
​
F    # 进程标志,1:进程可以复制,但是不能执行 ,4:进程使用超级用户权限
S    # 进程状态 与ps aux 中stat信息一致
UID  # 用户ID
PID  # 进程ID
PPID # 父进程ID
C    # cpu使用率,百分比
PRI  # 进程优先级,越小越先执行
NI   # 进程优先级
ADDR # 该进程在内存中的地址
SZ   # 内存使用
WCHAN # 是否正在运行,- 代表正在运行
TTY  # 用户终端
TIME  # cpu占用时间
CMD   # 执行的命令

top命令

top命令使用

~]# top [选项]
1)选项:
-d 秒数: # 指定 top 命令每隔几秒更新。默认是 3 秒
-b:     # 使用批处理模式输出。一般和“-n”选项合用,用于把 top 命令重定向到文件中
-n 次数: # 指定 top 命令执行的次数。一般和“-b”选项合用
-p:     # 指定 PID。只查看某个 PID 的进程
-s:     # 使 top 在安全模式运行,避免在交互模式中出现错误
-u 用户名: # 只监听某个用户的进程
在 top 命令的交互模式当中可以执行的命令:?或 h:  # 显示交互模式的帮助
P:      # 以 CPU 使用率排序,默认就是此项
M:      # 以内存的使用率排序
N:      # 以 PID 排序
T:      # 按照 CPU 的累积运算时间排序,也就是用 TIME+项排序
k:      # 按照 PID 号,给予某个进程一个信号。一般用于终止某个进程,信号 9是强制终止的信号
r:      # 按照 PID 号,给某个进程重设优先级(Nice)值
q:      # 退出 top

top输出的意思概述

~]# top
top - 11:54:25 up 12 days, 21:32,  1 user,  load average: 0.04, 0.07, 0.11
Tasks: 133 total,   1 running, 132 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.4 us,  1.0 sy,  0.0 ni, 97.5 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 16266184 total,  9273956 free,   961180 used,  6031048 buff/cache
KiB Swap:        0 total,        0 free,        0 used. 14964016 avail Mem 

第一行的概述

内容 说明
11:54:25 系统当前时间
up 12 days, 21:32 系统当前运行时间,本机已经运行12天21小时32分钟
1 user 当前登录了一个用户
load average: 0.04, 0.07, 0.11 系统在之前1分钟,5分钟,15 分钟的平均负载。如果CPU是单核,则这个数超过1,就是高负载. 如果CPU是四核,则这个数超过4,就是高负载 (这个平均负载完全是个人经验来进行判断的,一般认为不应该超过服务器CPU的核数。)

第二行的概述

内容 说明
Tasks: 133 total 系统总进程数
1 running 一个正在运行
132 sleeping 132在睡眠状态
0 stopped 0个停止状态
0 zombie 0个僵尸进程,如果不是0则需要手工检查

第三行概述(CPU信息)

内容(%Cpu(s)) 说明
1.4 us 用户模式占用的CPU百分比
1.0 sy 系统模式占用的CPU百分比
0.0 ni 改变过优先级的用户进程占用的CPU百分比
97.5 id 空闲的CPU百分比
0.1 wa 等待输入/输出的进程占用的CPU百分比
0.0 hi 硬中断请求服务占用的CPU百分比
0.0 si 软中断请求服务占用的CPU百分比
0.0 st

第四行(内存)

内容 说明(默认按k算)
16266184 total 总量16G
9273956 free 空闲9G
961180 used 占用1G(约等于)
6031048 buff/cache 6G缓冲/缓存

第五行(交换分区)

内容 说明
0 total 总量为零(说明没有交行空间)
0 free 空闲零
0 used 占用零
14964016 avail 可用15G
# 用top看全
~]# top -b -n 1 > test
# -b 批量输出,-n一次,批量输出一次到test文件(这样文件里的就是全的)

pstree 命令

pstree显示当前进程组成的进程树。

~]# pstree [选项]
选项:
-a: 显示完整的命令行
-p: 显示进程的 PID
-u: 显示进程的所属用户
init─┬─abrtd├─acpid├─atd├─auditd───{auditd}├─automount───4*[{automount}]├─certmonger├─crond├─cupsd├─dbus-daemon├─dhclient├─hald─┬─hald-runner─┬─hald-addon-acpi│      │             └─hald-addon-inpu│      └─{hald}├─httpd───3*[httpd───26*[{httpd}]]├─master─┬─pickup│        └─qmgr├─mcelog├─6*[mingetty]├─rpc.statd├─rpcbind├─rsyslogd───3*[{rsyslogd}]├─sshd───sshd───bash───pstree└─udevd───2*[udevd]

pgrep—Process Grep(指定查找)

查找命令进程ID

~]# pgrep[选项]...查询条件常用命令选项
-l:输出进程名,而不仅仅是PID
-U:检索指定用户的进程
-t:检索指定终端的进程
-x:精确匹配完整的进程名
# 示例
~]# pgrep ls
540
~]# pgrep -l  ls
540 lsmd

3)干掉进程

Ctrl+c组合键,中断当前命令程序

系统中可以识别的信号较多,我们可以使用命令 kill -l 来查询,结果如下

~]# kill -l
1) SIGHUP    2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF 28) SIGWINCH    29) SIGIO   30) SIGPWR
31) SIGSYS  34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX    

这里只解释一些常用的信号

1 SIGHUP   # 该信号让进程立即关闭,然后重新读取配置文件之后重启。
2 SIGINT   # 程序终止信号,用于终止前台进程,相当于输出 ctrl+c 快捷键。
9 SIGKILL  # 用来立即结束程序的运行. 本信号不能被阻塞处理和忽略。一般用于强制终止进程。
15 SIGTERM # 正常结束进程的信号,kill 命令的默认信号。有时如果进程已经发生问题,这个信号是无法正常终止进程的,我们才会尝试 SIGKILL 信号,也就是信号 9。
18 SIGCONT # 该信号可以让暂停的进程恢复执行。
19 SIGSTOP # 该信号可以暂停前台进程,相当于输入 ctrl+z 快捷键。

kill命令

~]# kill [信号] PID
~]# kill -1 1331   #重启进程号为1331的服务
~]# kill 1331 # 不写默认2

killall 命令

~]# killall [选项][信号] 进程名
选项:
-i: 交互式,询问是否要杀死某个进程
-I: 忽略进程名的大小写
​
#交互式杀死ssh服务
~]# ps aux | grep "sshd" | grep -v "grep"
root       1573  0.0  0.2  66236  1204 ?        Ss   18:28   0:00 /usr/sbin/sshd
root       1875  0.0  0.9 104616  4584 ?        Ss   18:29   0:00 sshd: root@pts/0
# 查询系统有 2 个 sshd 进程,sshd服务主进程,一个远程终端登录
~]# killall -i sshd
Kill sshd(1573) ? (y/N) y
#  这个进程是 sshd 的服务进程,如果杀死,所有的 sshd 连接都不能登录。
Kill sshd(1875) ? (y/N) n
# 这是我当前登录终端,一旦杀死,我也会掉线

pkill 命令

pkill 命令和 killall 命令非常类似,也是按照进程名来杀死进程。

~]# pkill [选项] [信号] 进程名
选项:
-t 终端号: # 按照终端号踢出用户
# 先查看在踢掉
~]# w
~]# pkill -9 -t pts/0
# 强制杀死从 pts/0 虚拟终端登录的进程

2.工作管理

1 )工作管理简介

  • 前台:是指当前可以操控和执行命令的这个操作环境; 后台:指工作可以自行运行,但是不能直接用 ctrl+c 来终止它,只能使用 fg/bg 来调用工作.

  • 当前的登录终端,只能管理当前终端的工作,而不能管理其他登录终端的工作。如 tty1 登 录的终端是不能管理 tty2 终端中的工作的(默认执行的操作都是当前终端)

  • 放入后台的命令必须可以持续运行一段时间,这样我们才能扑捉和操作这个工作。

  • 放入后台执行的命令不能和前台用户有交互或需要前台输入,否则放入后台只能暂停,而不能执行。比如 vim 命令放入后台只能暂停,而不能执行,因为 vim 需要前台输入信息。(top也不能)

2)把命令放入后台

使用 ”空格 &“ 在命令后。

#压缩一下/etc目录
~]# tar -zcf etc.tar.gz /etc &
[1] 2072
[1]+  Done                    tar -zcf etc.tar.gz /etc
# 如果出现 done 证明后台这个任务已经完成了,当然命令如果有执行结果的话,也会显示到操作终端上。
# [1]是 这个命令的工作号,+号代表这个任务是最近一个被放入后台的工作

第二种方法是在命令执行过程中按 ctrl+z 快捷键,命令在后台是暂停状态.

~]# tar -zcf etc.tar.gz /etc
tar: Removing leading `/' from member names
tar: Removing leading `/' from hard link targets
^Z
# jobs可以查看当前后台命令
~]# jobs
[1]+  Stopped                 tar -zcf etc.tar.gz /etc
​
# &与ctrl -z的区别,一个是放入后台执行,一个是放入后台并暂停(交互命令不论是哪种方法都是暂停状态)

3 )后台命令管理

查看后台的工作

~]# jobs [-l]
# 选项:
-l  # 显示工作的 PID

将后台暂停的工作恢复到前台执行

~]# fg %工作号
# 参数:  %工作号: %号可以省略,但是注意工作号和 PID 的区别
~]# fg 2

把后台暂停的工作恢复到后台执行

~]# bg %工作号

4)后台命令脱离登录终端运行

我们已经知道把命令放入后台,只能在当前登录终端执行。如果我是远程管理的服务器,在远程终端中执行了后台命令,这时我退出登录,这个后台命令会被终止但是我们有需要某些命令一直执行,以下是三种方法

  • 第一种方法是把需要后台执行的命令加入/etc/rc.local 文件,让系统在启动时执行这个后台程序。(但是执行该操作必须要重启服务器)

  • 第二种方法是使用系统定时任务,让系统在指定的时间执行某个后台命令。这样放入后台的命令与终端无关,是不依赖登录终端的。

  • 最后一种方法是使用 nohup 命令。 nohup 命令的作用就是让后台工作在离开操作终端时,也能够正确的在后台执行。

~]# nohup [命令] &
~]# nohup find / -print  > /root/file.log  &
# 用 find 命令,打印 / 下所有文件。放入后台执行,将输出信息定向到file.log文件中。
~]# nohup find / -print &
# 不指定文件,则默认忽略输入并把输出追加到"nohup.out"
[2] 2173
~]# nohup: ignoring input and appending output to `nohup.out'

3.系统资源查看相关命令

1)vmstat 命令监控系统资源

~]# vmstat 1 3
#每一秒刷新一次,共刷新三次
​
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st0  0      0 329960  21424  49564    0    0   324    34   84  140  1  2 91  6  0    0  0      0 329928  21424  49560    0    0     0     0   26   29  0  0 100  0  0   0  0      0 329928  21424  49560    0    0     0     0   27   32  0  0 100  0  0
procs:# 进程信息字段:r:   # 等待运行的进程数,数量越大,系统越繁忙。b:   # 不可被唤醒的进程数量,数量越大,系统月繁忙
memory:  # 内存信息字段:swpd: # 虚拟内存的使用情况,单位 KB。free: # 空闲的内存容量,单位 KB。buff: # 缓冲的内存容量,单位 KB。cache:# 缓存的内存容量,单位 KB。
swap:    # 交换分区的信息字段:si:   # 从磁盘中交换到内存中数据的数量,单位 KB。so:   # 从内存中交换到磁盘中数据的数量,单位 KB。此两个数越大,证明数据需要经常在磁盘和内存之间交换,系统性能越差。
io:      # 磁盘读写信息字段:bi:   # 从块设备读入数据的总量,单位是块。bo:   # 写到块设备的数据的总量,单位是块。此两个数越大,代表系统的 I/O 越繁忙。
system:  # 系统信息字段:in:   # 每秒被中断的进程次数。cs:   # 每秒钟进行的事件切换次数。此两个数越大,代表系统与接口设备的通信非常繁忙。
CPU:     # CPU 信息字段:us:   # 非内核进程消耗 CPU 运算时间的百分比。sy:   # 内核进程消耗 CPU 运算时间的百分比。id:   # 空闲 CPU 的百分比。wa:   # 等待 I/O 所消耗的 CPU 百分比。st:   # 被虚拟机所盗用的 CPU 占比  

2)dmesg 显示开机时内核检测信息

#dmesg 输出的信息很多,需要自己过滤
~]# dmesg | grep "eth0"       #网卡相关信息
​
~]# dmesg | grep "cpu"        #cpu信息

3)free 命令查看内存使用状态

~]# free 选项
选项:
-b: 以字节为单位显示
-k: 以 KB 为单位显示,默认就是以 KB 为单位显示
-m: 以 MB 为单位显示
-g: 以 GB 为单位显示
-h:  友好显示
​
~]# free -htotal       used       free     shared    buffers     cached
Mem:          474M       152M       322M       228K        20M        48M
-/+ buffers/cache:        83M       391M
Swap:         1.9G         0B       1.9G
​
# 第一行
total:总内存
used: 已使用
free:  空闲
shared: 多进程共享
buffers: 缓冲
cached: 缓存
​
# 第二行
-/buffers/cache=used-buffers-cached   +/buffers/cache=free+buffers+cached
# 第三行
total: 总量
used: 已使用
free:  空闲 

4)查看 CPU 信息

CPU 的主要信息保存在/proc/cpuinfo 这个文件当中,我们只要查看这个文件,就可以知道 cpu 的相关信息。

~]# cat /proc/cpuinfo
processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 94
......

5)查看本机登陆用户信息

如果我们想要知道 Linux 服务器上目前已经登录的用户信息,可以使用 w 或 who 命令来进行查询。

~]# w
15:48:51 up 23 min,  1 user,  load average: 0.01, 0.02, 0.05
当前时间   开机时间    一个用户   过去,5 ,10,15 min 的负载
USER     TTY      FROM              LOGIN@       IDLE       JCPU   PCPU     WHAT
用户     登录终端  从哪里登录         登陆时间     用户闲置时间(1,5,15)            当前在做什么
root     pts/0    100.100.100.1    15:28          0.00s     0.04s  0.00s      w
​
# JCPU   指的是和该终端连接的所有进程占用的 CPU 运算时间。这个时间里并不包括过去 的后台作业时间,但却包括当前正在运行的后台作业所占用的时间。
# PCPU   是指当前进程所占用的 CPU 运算时间。
​
~]# who
root     pts/0        2022-02-03 11:27 (172.17.0.43)
root     pts/1        2022-02-03 15:35 (172.17.0.43)
​
~]# users
root root

6)uptime命令

uptime命令的作用就是显示系统的启动时间和平均负载,也就是top命令的第一行。

~]# uptime15:40:01 up 13 days,  1:17,  2 users,  load average: 0.00, 0.04, 0.10

7)查看系统与内核相关信息

~]# uname [选项] 选项:
-a: 查看系统所有相关信息;
-r: 查看内核版本;
-s: 查看内核名称

8)判断系统文件的位数来推断系统的位数

主要是查看系统命令

~]# file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
# 可以看出是64位的

9)查看系统发行版本

# 文件查看
/etc/*-release
~]# ls /etc/*-release
/etc/centos-release  /etc/os-release  /etc/redhat-release  /etc/system-release
~]# cat /etc/centos-release
CentOS Linux release 7.5.1804 (Core)
​
# 命令查看
~]# hostnamectl

十九.定时任务

1.单定时命令at

注:不常用

使用 at 命令 设置执行一次的定时任务。

at 服务管理与访问控制

at 命令要想正确执行,需要 atd 服务的支持。atd 服务是独立的服务,需要保证服务已经正常启动。

~]# service atd start
#一般情况下服务默认启动
~]# chkconfig atd on
#设置开机自启
~]# chkconfig --list | grep 'atd'
atd             0:off   1:off   2:on    3:on    4:on    5:on    6:off

atd 服务启动之后,at 命令才可以正常使用,不过我们还需要了解下at 命令的访问控制。这里的访问控制指的是允许哪些用户使用 at 命令设定定时任务,或者不允许哪些用户使用 at 命令,at 的访问控制是依靠/etc/at.allow 文件(白名单)和/etc/at.deny 文件(黑名单)这两个文件来实现的。

  • 如果系统中有/etc/at.allow 文件,那么只有写入/etc/at.allow 文件(白名单)中的用户可以使用 at 命令,其他用户不能使用 at 命令(/etc/at.deny 文件会被忽略,也就是说同一个用户既写入/etc/at.allow 文件,也写入/etc/at.deny 文件,那么这个用户是可以使用 at 命令的,因为/etc/at.allow 文件优先级更高。

  • 如果系统中没有/etc/at.allow 文件,只有/etc/at.deny 文件,那么写入/etc/at.deny 文件 (黑名单)中的用户不能使用 at 命令,其他用户可以使用 at 命令。不过这个文件对 root 用户不生效。

  • 如果系统中这两个文件都不存在,那么只有 root 用户可以使用 at 命令。 系统中默认时只有/etc/at.deny 文件,而且这个文件是空的,这样的话系统中所有的用户都可以 使用 at 命令。不过如果我们打算控制用户的 at 命令权限,把用户写入/etc/at.deny 文件即可 /etc/at.allow 文件的权限更高,如果/etc/at.allow 文件存在,则/etc/at.deny 文件失效。 /etc/at.allow 管理行为更加严格,因为只有写入这个文件的用户才能使用 at 命令,如果需要禁用 at 命令的用户较多,则可以把少数用户写入这个文件。/etc/at.deny 文件的管理较为松散,如果允许使用 at 命令的用户较多,则可以把禁用的用户写入这个文件。不过这两个文件都不能对 root 用户生效。

at命令

~]# at [选项] 时间
# 选项:
-m:       # 当 at 工作完成后,无论是否命令有输出,都用 email 通知执行 at 命令的用户
-c 工作号: # 显示该 at 工作的实际内容
​
# 时间:   at      # 支持的时间格式如下:  HH:MM   # 在指定的“小时:分钟”执行命令,例如:02:30  HH:MM YYYY-MM-DD 在指定的“小时:分钟 年-月-日”执行,例如 02:30 2018-07-25  HH:MM[am|pm] [month] [date]  # 在指定的“小时:分钟[上午|下午][月][日]”执行,例如 02:30 July 25  HH:MM[am|pm] +[minutes|hours|days|weeks]  # 在指定的时间“再加多久执行”,例如 now + 5 minutes,05am +2 hours 

at 命令只要指定正确的时间,就可以输入需要在指定时间执行的命令了,这个命令可以是系统命令,也可以是 shell 脚本。

例子 1:在五分钟后执行hello脚本

~]# cat 1.sh
#!/bin/bash
echo "hello"
​
~]# at now +2 minutes
at> /bin/bash /root/1.sh
at> ctrl + d 保存任务
job 2 at 2019-12-10 16:21

例子 2: #在三点执行重启操作

~]# at 15:00 2019-12-12
at> /bin/sync
at> /sbin/shutdown -r now
at> <EOT>
job 3 at 2019-12-12 15:00

at管理命令

# 查询 atq
~]# atq
3   2019-12-12 15:00 a root
​
# 删除 atrm  [工作号]
~]# atrm 3

2.多次执行的定时任务crontab

crond 服务管理与访问控制 crontab 命令是需要 crond 服务支持的,所以要保证其正常运行。

#启动 crond 服务
~]# service crond start
# 设定 crond 服务为开机自启动  crond 服务默认是自启动的。
~]# chkconfig crond on 

crontab 命令和 at 命令类似,也是通过/etc/cron.allow 和/etc/cron.deny 文件来限制某些用户是否可以使用 crontab 命令的。

  • 当系统中有/etc/cron.allow 文件时,只有在此文件的用户可以使用 crontab 命令,没有写入的用户不能使用 crontab 命令。同样如果有此文件,/etc/cron.deny 文件会被忽略。

  • 当系统中只有/etc/cron.deny 文件时,则写入此文件的用户不能使用 crontab 命令,没有写入文件的用户可以使用 crontab 命令。 这个规则基本和 at 的规则一直,同样/etc/cron.allow 文件的优先级比/etc/cron.deny 文件的优先级高,Linux 中默认只有/etc/cron.deny 文件。

crontab 单用户设置

~]# crontab [选项]
# 选项:
-e:  # 编辑 crontab 定时任务
-l:  # 查询 crontab 任务
-r:  # 删除当前用户所有的 crontab 任务,如果有多个任务,只想删除一个,可以所以用“crontab -e”
-u    # 用户名: 修改或删除其他用户的 crontab 任务。(只有 root 可用)
​
# 针对当前用户的crontab任务编辑界面
~]# crontab -e
# 进入crontab编辑页面。会打开vim编辑工作
* * * * * *  执行的任务
项目 含义 范围
第一个“*” 一小时当中的第几分钟 0-59
第二个“*” 一天当中的第几小时 0-23
第三个“*” 一个月当中的第几天 1-31
第四个“*” 一年当中的第几月 1-12
第五个“*” 一周当中的星期几 0-7(0 和 7 都代表星期日)

在时间表示时,特殊字符概述

特殊符号 含义
* 代表任何时间。比如第一个“*”就代表一小时中每分钟都执行一次的意思。
代表不连续的时间。比如“0 8,12,16 * * * 命令”,就代表在 每天的 8 点 0 分,12 点 0 分,16 点 0 分都执行一次命令
- 代表连续的时间范围。比如“0 5 * * 1-6 命令”,代表在周一到周六的凌晨 5 点 0 分执行命令
*/n 代表每隔多久执行一次。比如“*/10 * * * * 命令”,代表每隔 10 分钟就执行一遍命令

crontab 例子

~]# crontab -e
0 5 * * * /sbin/shutdown -r now
# 每天凌晨五点执行重启操作
~]# crontab -e
0 5 * * 6  mysqldump  -u root -p123456 info > /root/info.dump
# ESC退出编辑模式:wq保存
# 每周6凌晨5点备份info数据库

在书写 crontab 定时任务时,需要注意几个注意事项

  • 六个选项都不能为空,必须填写。如果不确定使用“*”代表任意时间。

  • crontab 定时任务,最小有效时间是分钟,最大时间范围是月。像 2019 年某时执行,3 点 30 分 30 秒这样的时间都不能识别.

  • 在定义时间时,日期和星期最好不要在一条定时任务中出现,因为它们都是以天作为单位, 非常容易让管理员混乱

  • 在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都是用绝对路径。

系统的 crontab 设置

“crontab -e”是每个用户执行的命令,也就是说不同的用户身份可以执行自己的定时任务。可是有些定时任务需要系统执行,这时我们就需要编辑/etc/crontab 这个配置文件了。当然,并不是说写入/etc/crontab 配置文件中的定时任务执行时,不需要用户身份,而是“crontab -e”命令定义定 时任务时,默认用户身份是当前登录用户。而修改/etc/crontab 配置文件时,定时任务的执行着身份 是可以手工指定的。这样定时任务的执行会更加灵活,修改起来也更加方便。

~]# vim /etc/crontab
SHELL=/bin/bash    #指定shell
PATH=/sbin:/bin:/usr/sbin:/usr/bin  # 指定 PATH 环境变量
MAILTO=root  # 如果有报错输出,或命令结果有输出,会向 root 发信息
HOME=/  # 标示主目录
​
# For details see man 4 crontabs  #出现失败时,可以查看 crontabs 4等级的帮助
​
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

crontab配置方法

  • 把你需要定时执行的工作写成脚本程序,并赋予执行权限,然后直接把这个脚本复制到/etc/cron.{daily,weekly,monthly}目录中的任意一个。比如我需要让某个脚本每周执行,那么就把这个脚本复制到/etc/cron.weekly/目中。这样这个脚本就会每周执行一次,具体的执行时间要参考 anacron 的配置。

  • 第二种方法就是修改/etc/crontab 这个配置文件,自己加入自己的定时任务,不过需要注意指定脚本的执行者身份。

~]# vim /etc/crontab
* * * * * root  run-parts /root/a.sh

anacron

注:知道就可以了,默认

anacron 是用来干什么的呢?我们的 Linux 服务器如果不是 24 小时开机的,那么刚好在关机的时间段之内有系统定时任务(cron)需要执行,那么这些定时任务是不会执行的。也就是说,假设我们需要在凌晨 5 点 05 分执行系统的日志备份,但是我们的 Linux 服务器不是 24 小时开机的,在晚上需要关机,白天才会再次开机。这个定时任务的执行时间我们的服务器刚好没有开机,那么这个任务就不会执行了。anacron 就是用来解决这个问题的。 anacron 会使用一天,七天,一个月作为检测周期,用来判断是否有定时任务在关机之后没有执行,如果有这样的任务,anacron 会在特定的时间重新执行这些定时任务。在系统的/var/spool/anacron/ 目录中存在 cron.{daily,weekly,monthly}文件,

~]# vim /var/spool/anacron/cron.
cron.daily    cron.monthly  cron.weekly

这些文件中都保存着 anacron 上次执行时的时间。anacron 会去读取这些文件中的时间,然后和当前时间做比较,若果两个时间的差值超过了 anacron 的指定时间差值(一般是 1 天,7 天和一个月),就说明有定时任务漏掉了没有被执行,这时 anacron 会介入而执行这个漏掉的定时任务,从而保证在关机时没有被执行的定时任务不会被漏掉。在 CentOS 6.x 中,我们使用 cronie-anacron 取代了 vixie - cron 软件包。而且在原先的 CentOS 版本中 /etc/ cron.{daily,weekly,monthly}这些目录中的定时任务会同时被 cron 和 anacron 调用, 这样非常容易出现重复执行同一个定时任务的错误。 在现在的 CentOS 6.x 中, /etc/cron.{daily,weekly,monthly}目录中的定时任务程序只会被 anacron 调用,从而保证这些定时任务只会在每天、每周或每月被定时执行一次,而不会重复。

~]# anacron [选项] [工作名]
# 选项:
-s:  # 开始 anacron 工作,依据/etc/anacrontab 文件中的设定的延迟时间执行
-n:  # 立即执行/etc/anacrontab 中所有的工作,忽略所有的延迟时间
-u:  # 更新/var/spool/anacron/cron.{daily,weekly,monthly}文件中的时间戳,但不执行任何工作
# 参数:  工作名: 是依据/etc/anacrontab 文件中定义的工作名

anacron的配置文件为 /etc/anacrontab

~]# vim /etc/anacrontab
# /etc/anacrontab: configuration file for anacron
​
# See anacron(8) and anacrontab(5) for details.
​
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# 最大随机延迟。
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
#anacron 的执行时间范围是 3:00 - 22:00
​
#period in days   delay in minutes   job-identifier   command
1       5       cron.daily              nice run-parts /etc/cron.daily
7       25      cron.weekly             nice run-parts /etc/cron.weekly
@monthly 45     cron.monthly            nice run-parts /etc/cron.monthly
时间差    推迟执行分钟   工作名称         实际执行命令      

所以crontab中定义的定时任务,从本质上还是依赖 anacron 的配置文件。 我们用 cron.daily 工作来说明下/etc/anacrontab 的执行过程:

  • 首先读取/var/spool/anacron/cron.daily 中的上一次 anacron 执行的时间

  • 和当前时间比较,如果两个时间的差值超过 1 天,就执行 cron.daily 工作

  • 执行这个工作只能在 03:00-22:00 之间

  • 执行工作时强制延迟时间为 5 分钟,再随机延迟 0-45 分钟时间;

  • 使用 nice 命令指定默认优先级,使用 run-parts 脚本执行/etc/cron.daily 目录中的所有可执行文件。

二十.日志介绍管理与配置

1.日志简介

日志相关服务介绍

在 CentOS 6.x 中日志服务使用 rsyslogd 服务,rsyslogd 具有以下特点:

  • 基于 TCP 网络协议传输日志信息

  • 更安全的网络传输方式

  • 有日志消息的及时分析框架

  • 后台数据库

  • 配置文件中可以写简单的逻辑判断

  • 与旧版本日志服务 syslog 配置文件相兼容

2.常见日志文件

日志文件 说明
/var/log/cron 记录了系统定时任务相关的日志
/var/log/cups/ 记录打印信息的日志
/var/log/dmesg 记录了系统在开机时内核自检的信息。也可以使用 dmesg 命令直接查看内核自检信息
/var/log/btmp 记录错误登录的日志。这个文件是二进制文件,不能直接使用vim查看, 而要使用 lastb 命令查看
/var/log/lastlog 记录系统中所有用户最后一次的登录时间的日志。这个文件也是二进制文件,不能直接使用vim查看,而要使用 lastlog 命令查看
/var/log/mailog 记录邮件信息
/var/log/message 记录系统重要信息的日志。这个日志文件中会记录 Linux 系统的绝大多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日志文件
/var/log/secure 记录验证和授权方面的信息,只要涉及账户和密码的程序都会记录。 比如说系统的登录,ssh 的登录,su 切换用户,sudo 授权,甚至添加用户和修改用户密码都会记录在这个日志文件中
/var/log/wtmp 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是一个二进制文件,不能直接使用vim查看,而需要使用 last 命令来查看
/var/run/utmp 记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。不能直接使用vim查看,而要使用 w,who,users 等命令来查询

除了系统默认的日志之外,采用 RPM 方式安装的系统服务也会默认把日志记录在/var/log/目录 中(源码包安装的服务日志是在源码包指定目录中)。不过这些日志不是由 rsyslogd 服务来记录和管理的,而是各个服务使用自己的日志管理文档来记录自身日志,一些常见rpm包安装的服务,日志位置:

/var/log/httpd/ # RPM 包安装的 apache 服务的默认日志目录
/var/log/mail/  # RPM 包安装的邮件服务的额外日志目录
/var/log/samba/ # RPM 包安装的 samba 服务的日志目录
/var/log/sssd/  # 守护进程安全服务目录

3.日志服务 rsyslogd

日志文件格式 只要是由日志服务 rsyslogd 记录的日志文件,他们的格式是一样的。基本日志格式包含以下四列:

  • 事件产生的时间

  • 发生事件的服务器的主机名

  • 产生事件的服务名或程序名

  • 事件的具体信息。

rsyslogd 服务的配置文件

/etc/rsyslog.conf 配置文件格式

~]# vim /etc/rsyslog.conf
# rsyslog v5 configuration file
​
# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
​
#### MODULES ####
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
# 加载 imuxsock 模块,为本地系统登录提供支持
​
$ModLoad imklog   # provides kernel logging support (previously done by rklogd)
# 加载 imklog 模块,为内核登录提供支持
​
#$ModLoad immark  # provides --MARK-- message capability
# 加载 immark 模块,提供标记信息的能力
​
# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514
# 加载 UPD 模块,允许使用 UDP 的 514 端口接收采用 UDP 协议转发的日志
​
# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514
# 加载 TCP 模块,允许使用 TCP 的 514 端口接收采用 TCP 协议转发的日志
​
#### GLOBAL DIRECTIVES ####
#--------------------------全局配置-------------------------
​
# Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
# 定义日志的时间使用默认的时间戳格式
​
# File syncing capability is disabled by default. This feature is usually not required,
# not useful and an extreme performance hit
#$ActionFileEnableSync on
# 文件同步功能。默认没有开启
​
# Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf
# 子配置文件也同时生效
​
#-----------------------主要的配置文件如下(3个特殊日志,不允许修改,因为默认有日志文件)--------------------------------------
服务名+连接符号+日志等级                       日志位置
authpriv.*                                /var/log/secure
#认证服务所有等级的日志都记录在/var/log/secure  文件中
​
mail.*                                                  -/var/log/maillog
#邮件服务所有等级日志,保存到 /varlog/maillog              -  代表先保存到内存中。
​
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
#所有能被rsyslog服务管理日志的服务的info等级日志,认证服务none级别日志,定时任务none等级日志都记录在 /var/log/messages文件中
。。。。。。

服务等级

那么我们首先需要确定rsyslogd 服务可以识别哪些服务的日志,也可以理解为以下这些服务委

服务名称 说明
auth (LOG_ _AUTH) 安全和认证相关消息(不推荐使用authpriv替代)
authpriv (LOG_ AUTHPRIV) 安全和认证相关消息(私有的)
cron (LOG_ CRON) 系统定时任务cront和at产生的日志
daemon (LOG_ _DAEMON) 和各个守护进程相关的日志
ftp (LOG_ FTP) ftp守护进程产生的日志.
kern (L0G_ _KERN) 内核产生的日志(不是用户进程产生的)
local0- local7(LOG_ _L0CALO 7) 为本地使用预留的服务
lpr (LOG_ LPR) 打印产生的日志
mail (LOG_ MAIL) 邮件收发信息
news (LOG_ NEWS) 与新闻服务器相关的日志
syslog (LOG_ SYSL0G) 有syslogd服务产生的日志信息(虽然服务名称已经改为rsyslogd,但是很多配置都还是沿用了syslogd 的,这里并没有修改服务名)
user (LOG_ USER) 用户等级类别的日志信息
uucp (LOG_ UUCP) uucp子系统的日志信息,uucp 是早期linux系统进行数据传递的协议,后来也常用在新闻组服务中

连接符号说明

# 格式:
# 日志服务[连接符号]日志等级    日志记录位置
# “.”代表只要比后面的等级高的(包含该等级)日志都记录下来。比如:“cron.info” 代表 cron 服务产生的日志,只要日志等级大于等于 info 级别,就记录
# “.=”代表只记录所需等级的日志,其他等级的都不记录。比如:“*.=emerg”代表任 何日志服务产生的日志,只要等级是 emerg 等级就记录。这种用法及少见,了解就好
# “.!”代表不等于,也就是除了该等级的日志外,其他等级的日志都记录。 

日志等级说明

日志名称 说明
none 忽略日志
debug(LOG_DEBUG) 一般的调试信息说明
info(LOG_INFO) 基本的通知信息
notice(LOG_NOTICE) 普通信息,但是有一定的重要性
warning(LOG_WARNING) 警告信息,但是还不回影响到服务或系统的运行
err(LOG_ERR) 错误信息,一般达到 err 等级的信息以及可以影响到服务或系统的运行了
crit(LOG_CRIT) 临界状况信息,比 err 等级还要严重
alert(LOG_ALERT) 警告状态信息,比 crit 还要严重。必须立即采取行动
emerg(LOG_EMERG) 疼痛等级信息,系统已经无法使用了
* 代表所有日志等级(比如:“authpriv.*”代表 authpriv 认证信息服务产生的日志,所有的日志等级都记录)

日志保存位置

日志记录位置就是当前日志输出到哪个日志文件中保存,当然也可以把日志输出到打印机打印, 或者输出到远程日志服务器上(当然日志服务器要允许接收才行)。

# 日志文件的绝对路径。这是最常见的日志保存方法,如“/var/log/secure”就是保存系统验证和授权信息日志的。
# 系统设备文件。如“/dev/lp0”代表第一台打印机,如果日志保存位置是打印机设备的话,当有日志时就会在打印机打印。
# 转发给远程主机。因为可以选择使用 TCP 协议和 UDP 协议传输日志信息,所以有两种发送格式。# 如使用“@100.100.100.102:514”,就会把日志内容使用 UDP 协议发送到 100.100.100.102 的 UDP 514 端口上。# 如果使用“@@192.168.0.210:514”就会把日志内容 使用 TCP 协议发送到 100.100.100.102 的 TCP 514 端口上,其中 514 是日志服务默认端口。 当然只要100.100.100.102 同意接收此日志,就可以把日志内容保存在日志服务器上。
# 用户名。如“root”,就会把日志发送给 root 用户,当然 root 要在在线,否则就收不到日志信息了。发送日志给用户时,可以使用“*”代表发送给所有在线用户,如“mail.*  *”就会把 mail 服务产生的所有级别的日志发送给所有在线用户。如果需要把日志发送给多个在线用户,用户名之间用“,”分隔。
# 忽略或丢弃日志。如果接受日志的对象是“~”,代表这个日志不会记录,而被直接丢弃。如“local3.*  ~”代表忽略 local3 服务类型所有的日志都不记录。

自定义日志

~]# vim /etc/rsyslog.conf
​
# 添加自己的日志配置
*.*             /root/os.log
# 把所有服务的所有等级日志保存在 /root/os.log文件中
#重启服务
~]# service rsyslog restart
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]
​
# 查看/root/目录下de os.log 日志文件
~]# ll
-rw-------  1 root root   663 Dec 17 09:47 os.log

4.日志轮替

日志分为轮替与切割,日志轮替首先要切割日志(linux自带轮替与切割)

何为日志轮替

日志轮替就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后,就会进行删除。(如:日志要保存30天,则31天删除第一天的保存2-31天的日志)

日志轮替文件命名

在centos6中主要使用logrotate进行日志轮替管理,要想改变日志轮替文件名字,主要依靠 /etc/logrotate.conf 配置文件中“dateext”参数:

  • 如果配置文件中拥有“dateext”参数,那么日志会用日期来作为日志文件的后缀,例如 “secure-20191219”。这样的话日志文件名不会重叠,所以也就不需要日志文件的改名, 只需要保存指定的日志个数,删除多余的日志文件即可。

  • 如果配置文件中没有“dateext”参数,那么日志文件就需要进行改名了。当第一次进行日志轮替时,当前的“secure”日志会自动改名为“secure.1”,然后新建“secure”日志, 用来保存新的日志。当第二次进行日志轮替时,“secure.1”会自动改名为“secure.2”, 当前的“secure”日志会自动改名为“secure.1”,然后也会新建“secure”日志,用来保存新的日志,以此类推。

windows的也是有日志的,但只能一起删除

logrotate 配置文件

/etc/logrotate.conf 为 logrotate的全局配置文件

~]# vim /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
# 每周对日志文件进行一次轮替
# keep 4 weeks worth of backlogs
rotate 4
#共保存4份日志文件,当建立新的日志文件时,旧的将会被删除
# create new (empty) log files after rotating old ones
create
#创建新的空的日志文件,在日志轮替后
# use date as a suffix of the rotated file
dateext
# 使用日期作为日志轮替文件的后缀
# uncomment this if you want your log files compressed
#compress
# 日志文件是否压缩。如果取消注释,则日志会在转储的同时进行压缩
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# 包含 /etc/logrotate.d/ 目录中所有的子配置文件。也就 是说会把这个目录中所有子配置文件读取进来,
#----------------------------------------------------------------------------
#下面是单独设置,优先级更高(如果这里设置了,上面则不生效)。
# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp { monthly # 每月对日志文件进行一次轮替 create 0664 root utmp # 建立的新日志文件,权限是 0664 ,所有者是 root ,所属组是 utmp 组         minsize 1M   # 日志文件最小轮替大小是 1MB 。也就是日志一定要超过 1MB 才会轮替,否则就算时间达到一个月,也不进行日志转储 rotate 1 # 仅保留一个日志备份。也就是只有 wtmp 和 wtmp.1 日志保留而已
}
​
/var/log/btmp {missingok # 如果日志不存在,则忽略该日志的警告信息monthlycreate 0600 root utmprotate 1
}
​
# system-specific logs may be also be configured here.

参数说明

参 数 参 数 说 明
daily 日志的轮替周期是每天
weekly 日志的轮替周期是每周
monthly 日志的轮替周期是每月
rotate 数字 保留的日志文件的个数。0 指没有备份
compress 日志轮替时,旧的日志进行压缩
create mode owner group 建立新日志,同时指定新日志的权限与所有者和所属组。
mail address 当日志轮替时,输出内容通过邮件发送到指定的邮件地址。
missingok 如果日志不存在,则忽略该日志的警告信息
notifempty 如果日志为空文件,则不进行日志轮替
minsize 大小 日志轮替的最小值。也就是日志一定要达到这个最小值才会轮替,否则就算时间达到也不轮替
size 大小 日志只有大于指定大小才进行日志轮替,而不是按照时间轮替。
dateext 使用日期作为日志轮替文件的后缀。
sharedscripts 在此关键字之后的脚本只执行一次。
prerotate/endscript 在日志轮替之前执行脚本命令(使用该参数时必须先写sharedscripts)
postrotate/endscript 在日志轮替之后执行脚本命令(使用该参数时必须先写sharedscripts)

配置示例

/var/log/httpd/*.log {   # 日志轮替的是 /var/log/httpd/ 中 RPM 包安装的 apache 的所有日志            rotate 5    # 轮替 5 次                       size 100k    # 日志大于 100KB 时才进行日志轮替,不再按照时间轮替            sharedscripts    # 以下脚本只执行一次            postrotate    # 在日志轮替结束之后,执行以下脚本                /usr/bin/killall -HUP httpd     # 重启 apache 服务            endscript    # 脚本结束
}

prerotate 和 postrotate 主要用于在日志轮替的同时,执行指定的脚本,一般用于日志轮替之后重启服务。这里强调,如果你的日志是写入 rsyslog 服务的配置文件的,那么把新日志加入 logrotate 后,一定要重启 rsyslog 服务,否则你会发现虽然新日志建立了,但是数据还是写入了旧的日志当中。 那是因为虽然 logrotate 知道日志轮替了,但是 rsyslog 服务却并不知道。同理,如果你的日志不是 被 rsyslog 管理,如源码包安装的 Apache、Nginx 等服务,则需要重启 Apache 或 Nginx 服务,否则 日志也不能正常轮替。

把自己的日志加入日志轮替

这里有两个方法: 第一种方法是直接在/etc/logrotate.conf 配置文件中写入该日志的轮替策略, 从而把日志加入轮替; 第二种方法是在/etc/logrotate.d/目录中新建立该日志的轮替文件,在该轮替文件中写入正确的轮替策略,因为该目录中的文件都会被“include”到主配置文件中,所以也可以把日志加入轮替。我们这里推荐使用第二种方法,因为系统中需要轮替的日志非常多,如果全都直接写 入/etc/logrotate.conf 配置文件,那么这个文件的可管理性就会非常差,不利于此文件的维护。 在/etc/logrotate.d/已经有一些文件了

~]# ls /etc/logrotate.d/
ConsoleKit  cups  dracut  httpd  mcelog  numad  psacct  sssd  syslog  yum

下面是两个示例

# 我们对 /var/log/messages 进行日志轮替配置
~]# vim /etc/logrotate.d/messages # 创建 messages 轮替文件。添加以下代码。
/var/log/messages {         daily           #每天轮替一次         rotate 10        #保留 10 个轮替日志         sharedscripts    #以下命令只执行一次postrotate       #在日志轮替之后执行                 /bin/kill -HUP $(/bin/cat /var/run/syslogd.pid 2>/dev/null) &>/dev/null         endscript       #重启 rsyslog 服务,保证日志轮替正常
}
​
# 我们如果需要把 Nginx 服务的日志加入日志轮替
~]# vim /etc/logrotate.d/nginx   # 创建 nginx 轮替文件。添加以下代码
/opt/nginx/logs/access.log /opt/nginx/logs/error.log { daily  rotate 15  sharedscripts  postrotate         /bin/kill -HUP $(/bin/cat /var/run/syslogd.pid) &>/dev/null   #重启 rsyslog 服务         /bin/kill -HUP $(/bin/cat /opt/nginx/logs/nginx.pid) &>/dev/null   #重启 Nginx 服务  endscript
} 

logrotate 命令

我们日志轮替之所以可以在指定的时间备份日志,其实也要依赖系统定时任务。如果大家还记得 /etc/cron.daily/目录,就会发现这个目录中是有 logrotate 文件,logrotate 通过这个文件依赖定时任务执行的。

~]# ls /etc/cron.daily/
cups  logrotate  makewhatis.cron  mlocate.cron  prelink  readahead.cron  tmpwatch

命令如下(系统默认会执行的)

~]# logrotate [选项] 配置文件名
# 选项:  如果此命令没有选项,则会按照配置文件中的条件进行日志轮替
-v: # 显示日志轮替过程。加了-v 选项,会显示日志的轮替的过程
-f: # 强制进行日志轮替。不管日志轮替的条件是否已经符合,强制配置文件中所有的日志进行轮替。

我们使用 *logrotate -vf /etc/logrotate.conf * 执行所有的论轮替任务 查看我们刚才设置的nginx目录,已经多了轮替文件

~]# ls /opt/nginx/logs/
access.log  access.log-20191219  error.log  error.log-20191219  nginx.pid

linux基础学习思维导图及文档(17万字)相关推荐

  1. linux基础知识思维导图

    还在写.之后的内容会有更新,同时也会更新到github中. 因为linux内容太多了,这里的思维导图更像是知识索引,推荐稍微有一丢丢基础的同学作为复习使用. ---------更新---------- ...

  2. Java基础学习—思维导图

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/52894625冷血之心的博客) 找到两张Java学习的思维导图,特别 ...

  3. php思维导图xmind文档,思维导图XMind特色功能介绍

    原标题:思维导图XMind特色功能介绍 XMind功能全面,易上手,深受用户的喜爱.今天在这里介绍下最新版xmind pro 7软件独有的一些特色功能. 一.同步数据至印象笔记 最新版的xmind p ...

  4. Python基础学习思维导图

  5. Qt基础学习思维导图

  6. python课程思维导图_零基础Python学习思维导图,记得收藏

    原标题:零基础Python学习思维导图,记得收藏 本文主要涵盖了 Python 编程的核心知识(暂不包括标准库及第三方库). 1.按顺序依次展示了以下内容的一系列思维导图:基础知识,数据类型(数字,字 ...

  7. 深度强化学习基础知识 思维导图

    学习了王树森老师的深度强化学习入门课件,将各个算法整理在如下思维导图中. 深度强化学习基础知识 思维导图

  8. MySQL学习思维导图(MySQL简介、SQL基础命令、约束、单表查询、多表查询、内置函数、存储过程、视图、事务、索引)

    MySQL学习思维导图 内容包括:MySQL简介.SQL基础命令.约束.单表查询.多表查询.内置函数.存储过程.视图.事务.索引 文章目录 MySQL学习思维导图 一.MySQL简介 二.SQL基础命 ...

  9. 2023最新软件测试学习思维导图(从小白到大师进阶之路)

    如下是我工作之余熬夜整理的软件测试学习思维导图,通过回顾多年的从业经验,总结提炼出来的一些东西,希望能对大家有些帮助,特别是刚入门软件测试行业或将要加入软件测试行业的同学,可以认真看一下,可以作为参考 ...

  10. C#语言学习思维导图

    C#语言学习思维导图 C#的学习可分为3个部分: (1)基础 (2)中级 (3)应用 (1)基础 (2)中级 (3)应用

最新文章

  1. 学术分享丨面向机器人的学习算法简述
  2. [bzoj1088]扫雷
  3. 切换账户、切换命令行和图形界面
  4. GDCM:gdcm::Printer的测试程序
  5. 见证中国技术成长 数据技术嘉年华的别样十年
  6. tensorflow2 目标检测_一文了解YOLO-v4目标检测
  7. 2017-08-16 BEX5下集成FullCalendar
  8. KGDiscreetAlertView
  9. 从软件project的角度写机器学习3——主要监督学习算法的project性分析
  10. Max Script 入门教程
  11. api 与 implement 的区别
  12. 图片默认底部3px缝隙
  13. 微信小程序实现类似微信提现、支付宝提现充值等 “自定义键盘“可实现自定义右下角搜索内容,手写input功能view组件,实现焦点获取事件
  14. 2021年5月—系统集成项目管理工程师—上午综合知识(51-60)
  15. 计算机任务驱动法教学应用,_任务驱动法_在计算机基础教学中的应用
  16. Oracle下的exp/imp
  17. 李宏毅2022hw2
  18. 怎样清除bios密码
  19. android thumbnail获取图片,系统获取视频缩略图的getThumbnail()真的那么快吗?
  20. 以太网2出现两个ip地址-解决办法

热门文章

  1. 计算机视觉(三)线性分类器
  2. 随机效应估算与固定效应估算_混合OLS模型、固定效应模型、随机效应模型的区别是什么...
  3. Hexo-Next主题配置
  4. 基于php的人力资源管理系统,基于thinkPHP框架的人力资源管理系统
  5. 主板24pin接口详图_24Pin接口再见!华擎推出首款ATX12VO标准的Z490主板
  6. win10u盘被写保护怎么解除_win10系统磁盘被写保护如何解除 磁盘被写保护解除方法...
  7. twincat3授权
  8. cmd命令:批量创建文件夹
  9. 淘宝优惠券去哪里领?
  10. 计算机组装维修设置还原点,电脑组装、维护与故障排除