02.Linux的基础命令

第二讲 Linux常用命令

课程大纲课程内容学习效果掌握目标
Linux基础Linux的命令掌握
常用命令掌握

五、Linux常用命令

(一)Linux的命令

1、命令的必要性

虽然我们可以使用图形化界面,但图形化界面会影响服务器的性能。一般服务器需要长时间运行(一般为7*24小时不间断运行),图形化的桌面版系统庞大,复杂,容易造成崩溃。
命令行界面不够美观,但运行稳定,干扰性能项相对较少,对于开发人员而言操作也比较快捷方便。

图形化界面:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oIQXY49W-1639988203258)(media/998a04cbfaa5d8d68c5b67810dae7a91.png)]

命令行界面:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dcQ36kfo-1639988203260)(media/d9a15b45ced819683755f57e9216a515.png)]

2、命令的格式和语法
(1)命令的格式和语法

命令+空格+选项+空格+参数

(2)命令详解

命令:指单词或者词组的全称或者简写

选项:选项是包括一个或多个字母的代码,前面有一个“-”连字符,主要用于扩展基础命令

参数:命令操作的对象

(3)举例说明

如上图的命令行界面,ls -l /root
是一个完整的命令,其中“ls”是命令,“-l”是选项,“/root”是参数,执行ls -l /root
后会将结果展现给我们。

3、命令的分类
(1)命令分类

内部命令:也称作内置命令,随着Linux系统启动而加载到内存中,是常驻内存的,调用速度快,执行效率高。

**外部命令:**在Linux系统启动时并不随系统一起被加载到内存中,而是在需要时才将其从磁盘加载到内存中,调用速度相对较慢。

(2)命令类型的鉴别

如何区分某个命令是内部命令还是外部命令?

**type命令:**查看指定的命令是否是内部命令

type命令的语法:type+空格+命令

(3)案例

[root@node-1 ~]# type ifconfig

ifconfig 是 /usr/sbin/ifconfig

[root@node-1 ~]# type cd

cd 是 shell 内嵌

4、常用快捷键和基础命令
(1)who

基本语法:

语法功能描述
whoami显示自身用户名称
who am i显示登录用户的用户名
who看当前有哪些用户登录到了本台机器上

案例:(root用户登录切换到offcn用户下操作)

[offcn@node-1 root]$ whoami

offcn

[offcn@node-1 root]$ who am i

root pts/1 2021-01-28 14:51 (192.168.254.1)

[offcn@node-1 root]$ who

root :0 2021-01-27 15:26 (:0)

root pts/0 2021-01-28 09:34 (192.168.254.1)

root pts/1 2021-01-28 14:51 (192.168.254.1)

(2)pwd

基本语法:

语法功能描述
pwd显示当前工作目录的绝对路径

案例:

[root@node-1 offcn]# pwd

/home/offcn

(3)cd

基本语法:

语法功能描述
cd 绝对路径切换到所给的绝对路径下
cd 相对路径切换到所给的相对路径下
cd ~或者cd回到自己的家目录
cd -回到上一次所在目录
cd …回到当前目录的上一级目录

案例:

  • cd 绝对路径

[root@node-1 /]# cd /home/

[root@node-1 home]# pwd

/home

  • cd 相对路径

[root@node-1 home]# cd offcn/

[root@node-1 offcn]# pwd

/home/offcn

  • cd ~或者cd

[root@node-1 offcn]# cd

[root@node-1 ~]# pwd

/root

  • cd -

[root@node-1 ~]# cd -

/home/offcn

  • cd …

[root@node-1 offcn]# cd …

[root@node-1 home]# pwd

/home

(4)ifconfig

基本语法:

语法功能描述
ifconfig查看网络配置信息

案例:

[root@node-1 home]# ifconfig

ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

inet 192.168.254.111 netmask 255.255.255.0 broadcast 192.168.254.255

inet6 fe80::f9ea:b6c8:d16:6956 prefixlen 64 scopeid 0x20<link>

ether 00:0c:29:ca:ea:43 txqueuelen 1000 (Ethernet)

RX packets 49964 bytes 59153579 (56.4 MiB)

RX errors 0 dropped 0 overruns 0 frame 0

TX packets 21252 bytes 1451157 (1.3 MiB)

TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536

inet 127.0.0.1 netmask 255.0.0.0

inet6 ::1 prefixlen 128 scopeid 0x10<host>

loop txqueuelen 1000 (Local Loopback)

RX packets 560 bytes 62904 (61.4 KiB)

RX errors 0 dropped 0 overruns 0 frame 0

TX packets 560 bytes 62904 (61.4 KiB)

TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500

inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255

ether 52:54:00:93:8f:49 txqueuelen 1000 (Ethernet)

RX packets 0 bytes 0 (0.0 B)

RX errors 0 dropped 0 overruns 0 frame 0

TX packets 0 bytes 0 (0.0 B)

TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

(5)history

基本语法:

语法功能描述
history查看历史命令(1000条)

案例:

[root@node-1 home]# history

1 ll

2 pwd

3 ifconfig

(6)快捷键

基本语法:

语法功能描述
ctrl + c停止进程
ctrl + l清屏
tab键自动补全命令
上下键查找执行过的命令

(二)常用命令

1、帮助类命令

帮助类命令的作用:查看命令的含义以及使用方法。

whatis

基本语法:

语法功能描述
whatis + 命令描述一个命令执行什么功能

案例:

[root@node-1 home]# whatis who

who (1) - 显示已经登录的用户

更新信息库: mandb

man

基本语法:

语法功能描述
man + 命令Man即manual手册的简写。指的是命令的使用手册

案例:(退出手册查看方式->键入q)

图形用户界面, 文本, 网站描述已自动生成

help

基本语法:

语法功能描述
help + 内部命令查看内部命令的使用帮助
外部命令 + --help查看外部命令的使用帮助

案例:

  • help + 内部命令

[root@node-1 ~]# help pwd

pwd: pwd [-LP]

打印当前工作目录的名字。

选项:

-L 打印 $PWD 变量的值,如果它命名了当前的

工作目录

-P 打印当前的物理路径,不带有任何的符号链接

默认情况下,`pwd’ 的行为和带 `-L’ 选项一致

退出状态:

除非使用了无效选项或者当前目录不可读,否则

返回状态为0。

  • 外部命令 + --help

[root@node-1 ~]# ls --help

用法:ls [选项]… [文件]…

List information about the FILEs (the current directory by default).

Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.

Mandatory arguments to long options are mandatory for short options too.

-a, --all 不隐藏任何以. 开始的项目

2、文本编辑命令
(1)Linux文本编辑器介绍

在Windows中,我们可以使用记事本、word等等应用程序来编辑文件,那么在Linux里面我们需要使用vi或者vim编辑器来编辑文件。vi或者vim编辑器也是作为Linux中的命令存在的。

基本语法:

语法功能描述
vi/vim + 文件进入某文件的编辑界面对文件内容进行编辑

vi
是老式的文字处理器,来源于Unix操作系统,所有的类Unix系统也都会内建vi文本编辑器。

vim可以理解为是vi的增强版,现在可称为“Vi Improved”(Vi改进版),原来也被称为“Vi
Imitation”(Vi模拟版),vim比vi拥有更强大的编辑能力,增加了以字体颜色辨别语法的正确性,跨平台使用等功能,更加方便了程序的设计。

vi和vim在使用效果上的简单对比:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sJyIE5Kk-1639988203260)(media/6aee7132bf81338e53ba049664f6a85c.jpeg)]

vi/vim的三种模式:

我们在使用vi/vim时。主要有三种模式:一般模式、编辑模式、指令模式,不同模式有不同的功能,根据自己的需要使用不同的模式。

在使用之前,先准备一个测试用的文本文件,如下:

(2)Linux文本编辑器使用
a.一般模式

用vi/vim
打开一个文件就直接进入一般模式了。在该模式中,可以使用上下左右按键来移动光标,
也可以使用复制、粘贴、删除等功能来处理文件内容,但是这里的复制、粘贴、删除与Windows的操作是不同的。

常用语法:

语法功能描述
yy复制光标当前一行
y + 数字N + y 、 数字 + yy从光标闪烁处开始往后复制N行
p即paste,将复制的内容粘贴到光标所在行的下一行
u即undo,撤销上一步的操作
dd即delete,删除光标所在的当前行
d + 数字N + d从光标所在行开始往后删除N行
shift + ^移动到光标所在行的行头
shift + $移动到光标所在行的行尾
gg移动到文件的第一行
shift + g移动到文件的末尾行
数字N + shift + g移动到文件的第N行处
b.编辑模式

在一般模式中可以进行删除、复制、粘贴等等的动作,但是却无法编辑文件内容。我们需要进入编辑模式才可以编辑具体内容,我们可以在一般模式下键入『i,
I, o, O, a, A, r, R』等任一字母就可进入编辑模式。

进入编辑模式,会在左下方出现『INSERT 或 REPLACE 或 插入
』的字样。编辑完成后,按下『Esc』这个按键可退出编辑模式,回到一般模式,在一般模式下,可以进入指令模式,选择保存或者不保存文件。

常用语法:

语法功能描述
键入“i”在光标所在位置处进入编辑模式
键入“I”将光标定位到所在行的行头进入编辑模式
键入“a”将光标定位到当前位置的下一字节进入编辑模式
键入“A”将光标定位到所在行的行尾进入编辑模式
键入“o”在光标所在行的下一行新建一行进入编辑模式
键入“O”在光标所在行的上一行新建一行进入编辑模式
c.指令模式

该模式也被称之为底行模式,在一般模式下,输入『 : /
?』3个中的任何一个按键,就可以将光标移动到页面最底一行进入到指令模式,在该模式下可以进行保存、不保存、显示行号、搜索关键字等操作。按下『Esc』这个按键可退出编辑模式。

常用语法:

语法功能描述
键入“:或 / 或 ?”在一般模式下进入指令模式
键入“:”后输入“w”并回车保存
键入“:”后输入“q”并回车退出文本编辑器
键入“:”后输入“wq”并回车保存文本内容并退出文本编辑器
键入“:”后输入“!”并回车强制执行
键入“:”后输入“q!”并回车不保存文件,强制退出文本编辑器
键入“:”后输入“wq!”并回车强制保存并退出文本编辑器
一般模式下按下 Shift + z + z对非只读文件实现快速保存
键入“/”后输入“关键词”并回车查询文件中的关键词,按n向下查找下一个关键词
键入“?”后输入“关键词”并回车查询文件中的关键词,按n向上查找下一个关键词
键入“:”后输入“set nu名,”并回车显示每行的行号,取消 set nonu
键入“:”后输入“%s/word1/word2”并回车将文件中的word1替换为word2
(3)模式间转换

三种模式之间的转换如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c7iBxTwF-1639988203261)(media/224af6abb4f370ca8af6587a5fe9e445.png)]

实战演练

**需求1:**将测试文件“vi测试数据.txt”中含有“444”关键字的那行数据删除。

**需求2:**在测试文件末尾新增一行数据“this is last line”。

将修改后的测试文件进行保存退出。

3、文件目录类命令
(1)ls

基本语法:

语法功能描述
ls + [选项] + 目录显示指定目录下的所有子目录和文件 选项: -a :all,全部的文件,连同隐藏的文档( 开头为 . 的文件) 一起列出来(常用) -l :以详情列表列出,包含文件的属性与权限等等数据;(常用) -i :查看文件的inode号(inode存储文件的详细信息)

案例:

[root@node-1 test]# ls

d1 test1.txt test2.txt vi测试数据.txt

[root@node-1 test]# ls -l

总用量 20

drwxr-xr-x. 3 root root 16 1月 31 16:30 d1

-rw-r–r--. 1 root root 76 1月 31 16:02 test1.txt

-rw-r–r--. 1 root root 66 1月 31 15:44 test2.txt

-rw-r–r--. 1 root root 8892 1月 31 14:47 vi测试数据.txt

[root@node-1 test]# ll

总用量 20

drwxr-xr-x. 3 root root 16 1月 31 16:30 d1

-rw-r–r--. 1 root root 76 1月 31 16:02 test1.txt

-rw-r–r--. 1 root root 66 1月 31 15:44 test2.txt

-rw-r–r--. 1 root root 8892 1月 31 14:47 vi测试数据.txt

[root@node-1 test]# ll -a

总用量 20

drwxr-xr-x. 3 root root 76 1月 31 16:35 .

dr-xr-xr-x. 18 root root 236 1月 29 17:18 …

drwxr-xr-x. 3 root root 16 1月 31 16:30 d1

-rw-r–r--. 1 root root 76 1月 31 16:02 test1.txt

-rw-r–r--. 1 root root 66 1月 31 15:44 test2.txt

-rw-r–r--. 1 root root 8892 1月 31 14:47 vi测试数据.txt

[root@node-1 test]# ll -i

总用量 20

35513412 drwxr-xr-x. 3 root root 16 1月 31 16:30 d1

35296254 -rw-r–r--. 1 root root 76 1月 31 16:02 test1.txt

35299497 -rw-r–r--. 1 root root 66 1月 31 15:44 test2.txt

35299499 -rw-r–r--. 1 root root 8892 1月 31 14:47 vi测试数据.txt

(2)touch

常用语法:

语法功能描述
touch + 文件名称用来创建新的空文件

案例:

[root@node-1 data]# ll

总用量 0

[root@node-1 data]# touch test.txt

[root@node-1 data]# ll

总用量 0

-rw-r–r--. 1 root root 0 1月 29 15:50 test.txt

(3)mkdir

基本语法:

语法功能描述
mkdir + [选项] +要创建的目录创建一个新的目录 选项: -p :递归创建多级目录

案例:

[root@node-1 test]# ll

总用量 20

-rw-r–r--. 1 root root 76 1月 31 16:02 test1.txt

-rw-r–r--. 1 root root 66 1月 31 15:44 test2.txt

-rw-r–r--. 1 root root 8892 1月 31 14:47 vi测试数据.txt

[root@node-1 test]# mkdir data

[root@node-1 test]# ll

总用量 20

drwxr-xr-x. 2 root root 6 1月 31 16:30 data

-rw-r–r--. 1 root root 76 1月 31 16:02 test1.txt

-rw-r–r--. 1 root root 66 1月 31 15:44 test2.txt

-rw-r–r--. 1 root root 8892 1月 31 14:47 vi测试数据.txt

[root@node-1 test]# mkdir -p d1/d2/d3

[root@node-1 test]# ll

总用量 20

drwxr-xr-x. 3 root root 16 1月 31 16:30 d1

drwxr-xr-x. 2 root root 6 1月 31 16:30 data

-rw-r–r--. 1 root root 76 1月 31 16:02 test1.txt

-rw-r–r--. 1 root root 66 1月 31 15:44 test2.txt

-rw-r–r--. 1 root root 8892 1月 31 14:47 vi测试数据.txt

[root@node-1 test]# ll d1/d2/d3/

总用量 0

(4)echo 和 重定向

**echo:**输出内容

**重定向:**将数据写入到指定文件,分为追加写“>>”和覆盖写“>”

常用语法:

语法功能描述
echo + 输出内容(文本/命令结果/变量)将内容进行输出显示
echo + 输出内容 >> 文件将输出内容追加存储在指定文件中
echo + 输出内容 > 文件将输出内容覆盖存储在指定文件中

案例:

[root@node-1 data]# echo “hello”

hello

[root@node-1 data]# echo `date`

2021年 01月 29日 星期五 16:47:14 CST

[root@node-1 data]# echo $PWD

/test/data

[root@node-1 data]# cat test.txt

[root@node-1 data]# echo “hello” >> test.txt

[root@node-1 data]# echo `date` >> test.txt

[root@node-1 data]# cat test.txt

hello

2021年 01月 29日 星期五 16:48:52 CST

[root@node-1 data]# echo “world” > test.txt

[root@node-1 data]# cat test.txt

world

(5)printf

基本语法:

语法功能描述
printf + 格式 + 参数将数据指定格式进行输出

案例:

[root@node-1 data]# printf “hello world”

hello world[root@node-1 data]#

[root@node-1 data]# printf “hello world \n”

hello world

[root@node-1 data]# printf “%s \t %d \t %s \n” “zhangsan” 16 “man”

zhangsan 16 man

(6)mv

基本语法:

语法功能描述
mv + 原文件名 + 新文件名对文件进行重命名
mv + 文件/目录 + 路径将文件/目录移动到指定路径下

案例:

[root@node-1 data]# ll

总用量 4

-rw-r–r--. 1 root root 6 1月 29 16:49 test.txt

[root@node-1 data]# mv test.txt test1.txt

[root@node-1 data]# ll

总用量 4

-rw-r–r--. 1 root root 6 1月 29 16:49 test1.txt

[root@node-1 data]# mv test1.txt /opt/

[root@node-1 data]# ll /opt/

总用量 4

drwxr-xr-x. 2 root root 6 9月 7 2017 rh

-rw-r–r--. 1 root root 6 1月 29 16:49 test1.txt

(7)cp

基本语法:

语法功能描述
cp + 原文件 + 目标路径将一个或多个文件复制到指定的路径下
cp + 原文件 + 目标文件将一个文件复制到目标文件中 目标文件: 1、已存在文件,则覆盖其内容 2、不存在文件,则自动创建新文件
cp -r + 原目录 + 目标路径将该目录以及所有子目录下的所有文件拷贝到目标路径下 目标路径: 1、已存在路径,则拷贝到此路径下 2、不存在路径,则自动创建新目录

案例:

[root@node-1 opt]# ll

总用量 4

drwxr-xr-x. 2 root root 6 9月 7 2017 rh

-rw-r–r--. 1 root root 0 1月 31 09:24 test11.txt

-rw-r–r--. 1 root root 6 1月 29 16:49 test1.txt

[root@node-1 opt]# ll /test/

总用量 12

drwxr-xr-x. 2 root root 6 1月 31 09:35 data

-rw-r–r--. 1 root root 8890 1月 29 10:50 vi测试数据.txt

[root@node-1 opt]# cp test1* /test/

[root@node-1 opt]# ll /test/

总用量 16

drwxr-xr-x. 2 root root 6 1月 31 09:35 data

-rw-r–r--. 1 root root 0 1月 31 09:36 test11.txt

-rw-r–r--. 1 root root 6 1月 31 09:36 test1.txt

-rw-r–r--. 1 root root 8890 1月 29 10:50 vi测试数据.txt

[root@node-1 opt]# cp -r /test/data/ /opt/

[root@node-1 opt]# ll

总用量 4

drwxr-xr-x. 2 root root 6 1月 31 09:37 data

drwxr-xr-x. 2 root root 6 9月 7 2017 rh

-rw-r–r--. 1 root root 0 1月 31 09:24 test11.txt

-rw-r–r--. 1 root root 6 1月 29 16:49 test1.txt

[root@node-1 opt]# cp -r /test/data/ /opt/data2

[root@node-1 opt]# ll

总用量 4

drwxr-xr-x. 2 root root 6 1月 31 09:37 data

drwxr-xr-x. 2 root root 6 1月 31 09:37 data2

drwxr-xr-x. 2 root root 6 9月 7 2017 rh

-rw-r–r--. 1 root root 0 1月 31 09:24 test11.txt

-rw-r–r--. 1 root root 6 1月 29 16:49 test1.txt

(8)ln 链接

基本语法:

语法功能描述
ln + 原文件 + 目标文件给原文件创建一个硬链接存放到目标文件
ln -s + 原文件(绝对路径) + 目标文件给原文件创建一个软链接存放到目标文件

案例:

[root@node-1 opt]# ll -i

总用量 4

102334040 drwxr-xr-x. 2 root root 6 1月 31 10:01 data

102286313 drwxr-xr-x. 2 root root 6 9月 7 2017 rh

137008 -rw-r–r--. 1 root root 0 1月 31 09:24 test11.txt

67377416 -rw-r–r--. 1 root root 6 1月 29 16:49 test1.txt

[root@node-1 opt]# ll -i data/

总用量 0

[root@node-1 opt]# ln test1.txt data/

[root@node-1 opt]# ll -i data/

总用量 4

67377416 -rw-r–r--. 2 root root 6 1月 29 16:49 test1.txt

[root@node-1 opt]# ln test1.txt data/test1-1.txt

[root@node-1 opt]# ll -i data/

总用量 8

67377416 -rw-r–r--. 3 root root 6 1月 29 16:49 test1-1.txt

67377416 -rw-r–r--. 3 root root 6 1月 29 16:49 test1.txt

[root@node-1 opt]# ln -s /opt/test11.txt data/

[root@node-1 opt]# ll -i data/

总用量 8

67377416 -rw-r–r--. 3 root root 6 1月 29 16:49 test1-1.txt

102334041 lrwxrwxrwx. 1 root root 15 1月 31 10:03 test11.txt -> /opt/test11.txt

67377416 -rw-r–r--. 3 root root 6 1月 29 16:49 test1.txt

[root@node-1 opt]# ln -s /opt/test11.txt data/test11-1.txt

[root@node-1 opt]# ll -i data/

总用量 8

102334042 lrwxrwxrwx. 1 root root 15 1月 31 10:03 test11-1.txt ->
/opt/test11.txt

67377416 -rw-r–r--. 3 root root 6 1月 29 16:49 test1-1.txt

102334041 lrwxrwxrwx. 1 root root 15 1月 31 10:03 test11.txt -> /opt/test11.txt

67377416 -rw-r–r--. 3 root root 6 1月 29 16:49 test1.txt

(9)cat

基本语法:

语法功能描述
cat + [选项] + 文件查看文件内容,从第一行开始输出显示 选项: -n :列出行号,连同空白行也会有行号 -b :列出行号,仅对非空白行显示行号 -s :当遇到连续两行以上的空白行,转换为一行的空白行 -v :列出一些看不出来的特殊字符 (特殊字符输出ctrl+V ctrl+字符,比如输出空字符ctrl+V ctrl+@) -E :在每行结束处显示 $ -T :将 TAB 字符显示为 ^I -e :等价于"-vE"选项 -t :等价于"-vT"选项 -A : --show-all,等价于 -vET

案例:

[root@node-1 opt]# cat -n test11.txt

1 line 1

2

3

4 line 2

5 line 3

[root@node-1 opt]# cat -b test11.txt

1 line 1

2 line 2

3 line 3

[root@node-1 opt]# cat -s test11.txt

line 1

line 2

line 3

[root@node-1 opt]# cat -v test11.txt

line 1

line 2

line 3^@

[root@node-1 opt]# cat -E test11.txt

line 1 $

$

$

line 2$

line 3$

[root@node-1 opt]# cat -T test11.txt

line 1^I

line 2

line 3

[root@node-1 opt]# cat -e test11.txt

line 1 $

$

$

line 2$

line 3^@$

[root@node-1 opt]# cat -t test11.txt

line 1^I

line 2

line 3^@

[root@node-1 opt]# cat -A test11.txt

line 1^I$

$

$

line 2$

line 3^@$

(10)tac <-> cat

基本语法:

语法功能描述
tac + 文件将文件内容倒序输出

案例:

[root@node-1 opt]# tac test11.txt

line 3

line 2

line 1

(11)head

基本语法:

语法功能描述
head + [选项] + 文件从头开始显示文件内容,默认显示前10行 选项: -c : 显示的字节数 -n : 显示的行数

案例:

[root@node-1 test]# head vi测试数据.txt

this is line 1

this is line 2

this is line 3

this is line 4

this is line 5

this is line 6

this is line 7

this is line 8

this is line 9

this is line 10

[root@node-1 test]# head -c 10 vi测试数据.txt

this is li

[root@node-1 test]# head -n 2 vi测试数据.txt

this is line 1

this is line 2

(12)tail

基本语法:

语法功能描述
tail + [选项] + 文件倒序按行显示文件内容,默认显示后10行 选项: -c : 倒序按字节显示的字节数 -n : 倒序按行显示的行数 -f : 实时追踪文档的更新内容 -F : 根据文件名字进行实时追踪,当文件改名或删除文件后,保持重试,当有新的文件和它同名时,继续追踪
tailf + [选项] + 文件几乎等同于tail -f, 当文件改名之后它也能继续跟踪。与tail -f不同的是,如果文件不增长,它不会去访问磁盘文件

案例:

#换行符占用2个字节

[root@node-1 test]# tail -c 10 vi测试数据.txt

line 500

[root@node-1 test]# tail -n 2 vi测试数据.txt

this is line 499

this is line 500

(13)more

基本语法:

语法功能描述
more + 文件查看文件内容,一页一页的显示文件内容,并且显示当前查看文件的进度

功能使用说明

空白键 (space)或按Ctrl+F:向下翻一页

按Enter键:向下翻一行

按f键:向下翻两页

按b键:向上翻一页

按=:输出当前行的行号

按v键:调用vi编辑器

输入/后面跟需要搜索的字符串,按回车进行搜索,按n匹配下一个字符串

按q键:离开more ,不再显示该文件内容

案例:

[root@node-1 test]# more vi测试数据.txt

this is line 1

this is line 2

this is line 3

this is line 4

this is line 5

–More–(1%)

(14)less

基本语法:

语法功能描述
less + 文件使用与more比较类似,可查看文件内容,

功能使用说明:

按Enter键或向下键:代表向下翻一行

按y键或向上键:代表向上翻一行

按pagedown键或f键或空格键:向下翻动一页

按pageup键或b键:向上翻动一页

输入/后面跟需要搜索的字符串,按回车进行搜索,按n匹配下一个字符串按N匹配上一个字符串

输入?后面跟需要搜索的字符串,按回车进行搜索,按n匹配上一个字符串按N匹配下一个字符串

按v键:调用vi编辑器

按q键:离开less,不再显示该文件内容

案例:

[root@node-1 test]# less 测试数据.txt

(15)egrep

基本语法:

语法功能描述
egrep + 字符串规则 + 文件或目录在文件或目录中查找指定的字符串

案例:

[root@node-1 test]# egrep 99 测试数据.txt

this is line 99

this is line 199

this is line 299

this is line 399

this is line 499

(16)diff

基本语法:

语法功能描述
diff + [选项] + 文件1 + 文件2比较给定的两个文件的不同 选项: -i :不检查大小写的不同 -y :并列的显示文件的异同之处

案例:

[root@node-1 test]# cat test1.txt

this is line 1

this is line 2

this is line 3

This is line 4

this is line 05

[root@node-1 test]# cat test2.txt

this is line 1

my line 2

i love you

this is line 4

this is line 5

[root@node-1 test]# diff -iy test1.txt test2.txt

this is line 1 this is line 1

this is line 2 | my line 2

this is line 3 | i love you

This is line 4 this is line 4

this is line 05 | this is line 5

(17)rm

基本语法:

语法功能描述
rm + [选项] + 文件或目录删除文件或目录 选项: -r :删除目录以及其下的所有文件 -f :省略“是否删除”的确认询问

案例:

[root@node-1 test]# ll

总用量 20

drwxr-xr-x. 2 root root 6 1月 31 09:35 data

-rw-r–r--. 1 root root 0 1月 31 09:36 test11.txt

-rw-r–r--. 1 root root 76 1月 31 16:02 test1.txt

-rw-r–r--. 1 root root 66 1月 31 15:44 test2.txt

-rw-r–r--. 1 root root 8892 1月 31 14:47 vi测试数据.txt

[root@node-1 test]# rm -f test11.txt

[root@node-1 test]# ll

总用量 20

drwxr-xr-x. 2 root root 6 1月 31 09:35 data

-rw-r–r--. 1 root root 76 1月 31 16:02 test1.txt

-rw-r–r--. 1 root root 66 1月 31 15:44 test2.txt

-rw-r–r--. 1 root root 8892 1月 31 14:47 vi测试数据.txt

[root@node-1 test]# rm -rf data/

[root@node-1 test]# ll

总用量 20

-rw-r–r--. 1 root root 76 1月 31 16:02 test1.txt

-rw-r–r--. 1 root root 66 1月 31 15:44 test2.txt

-rw-r–r--. 1 root root 8892 1月 31 14:47 vi测试数据.txt

(18)rmdir

基本语法:

语法功能描述
rmdir + 要删除的空目录删除一个空目录

案例:

[root@node-1 test]# ll

总用量 20

drwxr-xr-x. 3 root root 16 1月 31 16:30 d1

drwxr-xr-x. 2 root root 6 1月 31 16:30 data

-rw-r–r--. 1 root root 76 1月 31 16:02 test1.txt

-rw-r–r--. 1 root root 8892 1月 31 14:47 vi测试数据.txt

[root@node-1 test]# rmdir d1

rmdir: 删除 “d1” 失败: 目录非空

[root@node-1 test]# rmdir data

[root@node-1 test]# ll

总用量 20

drwxr-xr-x. 3 root root 16 1月 31 16:30 d1

-rw-r–r--. 1 root root 76 1月 31 16:02 test1.txt

-rw-r–r--. 1 root root 8892 1月 31 14:47 vi测试数据.txt

4、 时间日期类命令

基本语法:

语法功能描述
date + 格式化字符串显示当前日期
date -d + 参数 + [格式化字符串]显示非当前日期
date -s + 时间格式字符串设置系统时间
cal + [选项]查看日历 选项: -3 :查看近3月的日历 年份 :查看某年的全年的日历
hwclock查看硬件时间
hwclock -s将硬件时间写入到系统时间
ntpdate -u + 远程时间服务器地址同步远程(网络)时间服务器的时间

案例:

[root@node-1 test]# date

2021年 02月 01日 星期一 09:16:51 CST

[root@node-1 test]# date +"%Y-%m-%d"

2021-02-01

[root@node-1 test]# date -d next-day +%Y%m%d

20210202

[root@node-1 test]# date -d yesterday +%Y%m%d

20210131

[root@node-1 test]# date -s “20210101”

2021年 01月 01日 星期五 00:00:00 CST

[root@node-1 test]# cal

二月 2021

日 一 二 三 四 五 六

1 2 3 4 5 6

7 8 9 10 11 12 13

14 15 16 17 18 19 20

21 22 23 24 25 26 27

28

[root@node-1 test]# cal -3

一月 2021 二月 2021 三月 2021

日 一 二 三 四 五 六 日 一 二 三 四 五 六 日 一 二 三 四 五 六

1 2 1 2 3 4 5 6 1 2 3 4 5 6

3 4 5 6 7 8 9 7 8 9 10 11 12 13 7 8 9 10 11 12 13

10 11 12 13 14 15 16 14 15 16 17 18 19 20 14 15 16 17 18 19 20

17 18 19 20 21 22 23 21 22 23 24 25 26 27 21 22 23 24 25 26 27

24 25 26 27 28 29 30 28 28 29 30 31

31

[root@node-1 test]# cal 2022

#12个月的日历,此处省略输出结果…

[root@node-1 test]# hwclock

2021年02月01日 星期一 09时19分33秒 -0.695238 秒

[root@node-1 test]# hwclock -s

[root@node-1 test]# date

2021年 02月 01日 星期一 09:19:49 CST

[root@node-1 test]# ntpdate -u ntp.api.bz

1 Feb 09:30:03 ntpdate[41937]: adjust time server 114.118.7.161 offset -0.08740
sec

5、用户管理命令
(1)useradd

基本语法:

语法功能描述
useradd + 用户名添加新用户(前提是有权限)

案例:

[root@node-1 ~]# useradd hadoop

(2)passwd

基本语法:

语法功能描述
passwd + 用户名设置用户密码

案例:

[root@node-1 ~]# passwd hadoop

更改用户 hadoop 的密码 。

新的 密码:

无效的密码: 密码是一个回文

重新输入新的 密码:

passwd:所有的身份验证令牌已经成功更新。

(3)id

基本语法:

语法功能描述
id + 用户名判断用户是否存在

案例:

[root@node-1 ~]# id hadoop

uid=1001(hadoop) gid=1001(hadoop) 组=1001(hadoop)

(4)su

基本语法:

语法功能描述
su + 用户名切换用户,只能获得用户执行权限,不能获得环境变量
su - + 用户名切换用户,获得该用户的执行权限和环境变量

案例:

[root@node-1 ~]# echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

[root@node-1 ~]# su hadoop

[hadoop@node-1 root]$ echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

[hadoop@node-1 root]$ su - hadoop

密码:

上一次登录:一 2月 1 10:31:40 CST 2021pts/2 上

[hadoop@node-1 ~]$ echo $PATH

/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/hadoop/.local/bin:/home/hadoop/bin

(5)visudo

基本语法:

语法功能描述
visudo等价于vi /etc/sudoers,修改用户权限

案例:

[root@node-1 ~]# visudo

## Sudoers allows particular users to run various commands as

## Allow root to run any commands anywhere

root ALL=(ALL) ALL

hadoop ALL=(ALL) ALL

(6)sudo

基本语法:

语法功能描述
sudo + 命令设置普通用户以root用户权限执行命令

案例:

[hadoop@node-1 home]$ pwd

/home

[hadoop@node-1 home]$ ll

总用量 1164

-rw-r–r--. 1 root root 1186996 1月 28 09:56 app-2021-01-10.log

drwx------. 5 hadoop hadoop 128 2月 1 13:38 hadoop

drwx------. 15 offcn offcn 4096 2月 1 13:39 offcn

[hadoop@node-1 home]$ rm -rf app-2021-01-10.log

rm: 无法删除"app-2021-01-10.log": 权限不够

[hadoop@node-1 home]$ sudo rm -rf app-2021-01-10.log

[sudo] hadoop 的密码:

配置成采用sudo命令时,不需要输入密码,则配置如下:

[root@node-1 ~]# visudo

## Sudoers allows particular users to run various commands as

## Allow root to run any commands anywhere

root ALL=(ALL) ALL

hadoop ALL=(ALL) NOPASSWD:ALL

(7)usermod

基本语法:

语法功能描述
usermod + 选项 + 参数修改用户信息 选项: -g :修改用户所属组 **-**l :修改用户名称

案例:

# usermod -l 新用户名 旧用户名

[root@node-1 ~]# usermod -l hadoop2 hadoop

[root@node-1 ~]# ll /home/

总用量 1164

-rw-r–r--. 1 root root 1186996 1月 28 09:56 app-2021-01-10.log

drwx------. 5 hadoop2 hadoop 128 2月 1 13:38 hadoop

drwx------. 15 offcn offcn 4096 2月 1 13:39 offcn

[root@node-1 ~]# id hadoop2

uid=1001(hadoop2) gid=1001(hadoop) 组=1001(hadoop)

# usermod -g 用户组 用户名

[root@node-1 ~]# usermod -g offcn hadoop2

[root@node-1 ~]# id hadoop2

uid=1001(hadoop2) gid=1000(offcn) 组=1000(offcn)

[root@node-1 ~]# ll /home/

总用量 1164

-rw-r–r--. 1 root root 1186996 1月 28 09:56 app-2021-01-10.log

drwx------. 5 hadoop2 offcn 128 2月 1 13:38 hadoop

drwx------. 15 offcn offcn 4096 2月 1 13:39 offcn

(8)userdel

基本语法:

语法功能描述
userdel + 用户名删除用户但保存用户主目录
userdel -r + 用户名删除用户以及对应的主目录

案例:

[root@node-1 ~]# id tom

uid=1002(tom) gid=1002(tom) 组=1002(tom)

[root@node-1 ~]# id hadoop2

uid=1001(hadoop2) gid=1000(offcn) 组=1000(offcn)

[root@node-1 ~]# ll /home/

总用量 1164

drwx------. 5 hadoop2 offcn 128 2月 1 13:38 hadoop

drwx------. 15 offcn offcn 4096 2月 1 13:39 offcn

drwx------. 3 tom tom 78 2月 1 14:53 tom

[root@node-1 ~]# userdel tom

[root@node-1 ~]# id tom

id: tom: no such user

[root@node-1 ~]# ll /home/

总用量 1164

drwx------. 5 hadoop2 offcn 128 2月 1 13:38 hadoop

drwx------. 15 offcn offcn 4096 2月 1 13:39 offcn

drwx------. 3 1002 1002 78 2月 1 14:53 tom

[root@node-1 ~]# userdel -r hadoop2

[root@node-1 ~]# id hadoop2

id: hadoop2: no such user

[root@node-1 ~]# ll /home/

总用量 1164

drwx------. 15 offcn offcn 4096 2月 1 13:39 offcn

drwx------. 3 1002 1002 78 2月 1 14:53 tom

6、用户组管理命令
(1)查看已创建用户组

[root@node-1 home]# cat /etc/group

offcn❌1000:

hadoop❌1001:

(2)groupadd

基本语法:

语法功能描述
groupadd + 用户组名创建一个新的工作组

案例:

[root@node-1 home]# groupadd jerry

[root@node-1 home]# cat /etc/group

offcn❌1000:

hadoop❌1001:

jerry❌1002:

(3)groupmod

基本语法:

语法功能描述
groupmod -n + 新组名 + 旧组名修改用户组名

案例:

[root@node-1 home]# groupmod -n jerry2 jerry

[root@node-1 home]# cat /etc/group

offcn❌1000:

hadoop❌1001:

jerry2❌1002:

(4)groupdel

基本语法:

语法功能描述
groupdel + 组名删除组

案例:

[root@node-1 home]# groupdel jerry2

[root@node-1 home]# cat /etc/group

offcn❌1000:

hadoop❌1001:

7、文件权限类命令
(1)文件属性

Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。在Linux中我们可以使用ll或者ls
–l命令来显示一个文件的属性以及文件所属的用户和组。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s5qCXaNW-1639988203263)(media/cf47db04e11a5e9127790c9063d215f8.jpeg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2LSNeJtM-1639988203263)(media/9e9f2ef604e80ba8a9e8f4970f21e6cf.png)]

例如:

[root@node-1 test]# ll

总用量 20

drwxr-xr-x. 3 root root 16 1月 31 16:30 d1

-rw-r–r--. 1 root root 76 1月 31 16:02 test1.txt

-rw-r–r--. 1 root root 66 1月 31 15:44 test2.txt

从左到右的10个字符表示:

如果没有权限,就会出现减号[ - ]而已。从左至右用0-9这些数字来表示:

  • 第0位表示类型
字符含义
-代表文件
d代表目录
c字符流,串行端口设备,例如键盘、鼠标(一次性读取装置)
ssocket
p管道 pipe
l链接文档(link file)
b设备文件,可供储存的接口设备(可随机存取装置)
  • 第1-3位确定属主(该文件的所有者)拥有该文件的权限。—User

  • 第4-6位确定属组(所有者的同组用户)拥有该文件的权限,—Group

  • 第7-9位确定其他用户拥有该文件的权限 —Other

文件类型属主权限属组权限其他用户权限
01 2 34 5 67 8 9
dr w xr - xr - x
目录文件读 写 执行读 写 执行读 写 执行
(2)文件权限
a. 作用到文件
权限解读
r代表可读(read): 可以读取,查看
w代表可写(write): 可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件。
x代表可执行(execute):可以被系统执行
b. 作用到目录
权限解读
r代表可读,可以查看目录中的文件列表
w代表可修改,可对目录内的文件进行创建、删除、移动等操作
x代表可以进入该目录

案例:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3gydiwVD-1639988203264)(media/ed461d0e35e2611acbbc2950233b4247.png)]

  • 如果是文件:链接数指的是硬链接个数。

  • 如果是目录:链接数指的是子文件夹个数。

(3)chmod
a.字母方式改变权限

基本语法:

语法功能描述
chmod + {ugoa}{±=}{rwx} + 文件或目录变更文件或目录的权限

u:所属主 g:所属组 o:其它用户 a:(all)代表ugo

+:增加权限 -:去掉权限 =:仅有某些权限

文件: r查看;w修改;x执行文件

目录: r列出目录内容;w在目录中创建和删除;x进入目录

案例:

[root@node-1 test]# ll

-rw-r–r--. 1 root root 76 1月 31 16:02 test1.txt

[root@node-1 test]# chmod u+x test1.txt

[root@node-1 test]# ll

-rwxr–r--. 1 root root 76 1月 31 16:02 test1.txt

[root@node-1 test]# chmod u-x test1.txt

[root@node-1 test]# ll

-rw-r–r--. 1 root root 76 1月 31 16:02 test1.txt

[root@node-1 test]# chmod g=wx test1.txt

[root@node-1 test]# ll

-rw–wxr–. 1 root root 76 1月 31 16:02 test1.txt

[root@node-1 test]# chmod a-w test1.txt

[root@node-1 test]# ll

-r----xr–. 1 root root 76 1月 31 16:02 test1.txt

b.数字方式改变权限

基本语法:

语法功能描述
chmod + 十进制数字 + 文件或目录变更文件或目录的权限

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5fn31Iz0-1639988203265)(media/4d93d8e310ba374b8768961405f71f5e.png)]

案例:

[root@node-1 test]# ll

-rwxrw-r–. 1 root root 76 1月 31 16:02 test1.txt

[root@node-1 test]# chmod 644 test1.txt

[root@node-1 test]# ll

-rw-r–r--. 1 root root 76 1月 31 16:02 test1.txt

(4)chown

基本语法:

语法功能描述
chown + 用户名 + 文件或目录变更文件或目录的所有者(只有root用户可操作)
chown + 用户名:用户组 + 文件或目录变更文件或目录的所有者及所属组
chown -R + 用户名 + 目录递归变更目录的所有者
chown -R + 用户名:用户组 + 目录递归变更目录的所有者及所属组

案例:

[root@node-1 test]# ll

drwxr-xr-x. 3 root root 16 1月 31 16:30 d1

-rw-r–r--. 1 root root 76 1月 31 16:02 test1.txt

[root@node-1 test]# chown offcn test1.txt

[root@node-1 test]# ll

drwxr-xr-x. 3 root root 16 1月 31 16:30 d1

-rw-r–r--. 1 offcn root 76 1月 31 16:02 test1.txt

[root@node-1 test]# chown offcn:offcn test1.txt

[root@node-1 test]# ll

drwxr-xr-x. 3 root root 16 1月 31 16:30 d1

-rw-r–r--. 1 offcn offcn 76 1月 31 16:02 test1.txt

[root@node-1 test]# chown -R offcn d1

[root@node-1 test]# ll

drwxr-xr-x. 3 offcn root 16 1月 31 16:30 d1

-rw-r–r--. 1 offcn offcn 76 1月 31 16:02 test1.txt

[root@node-1 test]# ll d1/

drwxr-xr-x. 3 offcn root 16 1月 31 16:30 d2

[root@node-1 test]# chown -R offcn:offcn d1

[root@node-1 test]# ll

drwxr-xr-x. 3 offcn offcn 16 1月 31 16:30 d1

-rw-r–r--. 1 offcn offcn 76 1月 31 16:02 test1.txt

[root@node-1 test]# ll d1/

drwxr-xr-x. 3 offcn offcn 16 1月 31 16:30 d2

(5)chgrp

基本语法:

语法功能描述
chgrp + 用户组 + 文件或目录改变文件或目录的所属组

案例:

[root@node-1 test]# ll

-rw-r–r--. 1 offcn offcn 76 1月 31 16:02 test1.txt

[root@node-1 test]# chgrp root test1.txt

[root@node-1 test]# ll

-rw-r–r--. 1 offcn root 76 1月 31 16:02 test1.txt

8、系统监控类
(1)df

基本语法:

语法功能描述
df + [选项]列出文件系统的整体磁盘使用情况 选项: -k :以 KBytes 的容量显示各文件系统(默认); -m :以 MBytes 的容量显示各文件系统; -h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示; -T :显示文件系统类型

案例:

[root@node-1 test]# df

文件系统 1K-块 已用 可用 已用% 挂载点

/dev/mapper/centos-root 36805060 5767540 31037520 16% /

devtmpfs 1997092 0 1997092 0% /dev

tmpfs 2014212 0 2014212 0% /dev/shm

tmpfs 2014212 12872 2001340 1% /run

tmpfs 2014212 0 2014212 0% /sys/fs/cgroup

/dev/sda1 1038336 160428 877908 16% /boot

tmpfs 402844 4 402840 1% /run/user/42

tmpfs 402844 56 402788 1% /run/user/0

vmhgfs-fuse 314572796 141786252 172786544 46% /mnt/hgfs

[root@node-1 test]# df -m

文件系统 1M-块 已用 可用 已用% 挂载点

/dev/mapper/centos-root 35943 5633 30311 16% /

devtmpfs 1951 0 1951 0% /dev

tmpfs 1968 0 1968 0% /dev/shm

tmpfs 1968 13 1955 1% /run

tmpfs 1968 0 1968 0% /sys/fs/cgroup

/dev/sda1 1014 157 858 16% /boot

tmpfs 394 1 394 1% /run/user/42

tmpfs 394 1 394 1% /run/user/0

vmhgfs-fuse 307200 138464 168737 46% /mnt/hgfs

[root@node-1 test]# df -h

文件系统 容量 已用 可用 已用% 挂载点

/dev/mapper/centos-root 36G 5.6G 30G 16% /

devtmpfs 2.0G 0 2.0G 0% /dev

tmpfs 2.0G 0 2.0G 0% /dev/shm

tmpfs 2.0G 13M 2.0G 1% /run

tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup

/dev/sda1 1014M 157M 858M 16% /boot

tmpfs 394M 4.0K 394M 1% /run/user/42

tmpfs 394M 56K 394M 1% /run/user/0

vmhgfs-fuse 300G 136G 165G 46% /mnt/hgfs

[root@node-1 test]# df -Th

文件系统 类型 容量 已用 可用 已用% 挂载点

/dev/mapper/centos-root xfs 36G 5.6G 30G 16% /

devtmpfs devtmpfs 2.0G 0 2.0G 0% /dev

tmpfs tmpfs 2.0G 0 2.0G 0% /dev/shm

tmpfs tmpfs 2.0G 13M 2.0G 1% /run

tmpfs tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup

/dev/sda1 xfs 1014M 157M 858M 16% /boot

tmpfs tmpfs 394M 4.0K 394M 1% /run/user/42

tmpfs tmpfs 394M 56K 394M 1% /run/user/0

vmhgfs-fuse fuse.vmhgfs-fuse 300G 136G 165G 46% /mnt/hgfs

(2)du

基本语法:

语法功能描述
du + [选项] + [文件或目录]用于显示目录或文件的大小 选项: -b : 显示目录或文件大小时,以byte为单位; -k :以1KB为单位; -m :以1MB为单位; -h :以K,M,G为单位,提高信息的可读性; -s :仅显示总计

案例:

[root@node-1 ~]# du -b jdk-8u144-linux-x64.tar.gz

185515842 jdk-8u144-linux-x64.tar.gz

[root@node-1 ~]# du -k jdk-8u144-linux-x64.tar.gz

181168 jdk-8u144-linux-x64.tar.gz

[root@node-1 ~]# du -m jdk-8u144-linux-x64.tar.gz

177 jdk-8u144-linux-x64.tar.gz

[root@node-1 ~]# du -h jdk-8u144-linux-x64.tar.gz

177M jdk-8u144-linux-x64.tar.gz

[root@node-1 ~]# du -s jdk-8u144-linux-x64.tar.gz

181168 jdk-8u144-linux-x64.tar.gz

[root@node-1 ~]#

[root@node-1 ~]# du -s -h /home/

5.4M /home/

[root@node-1 ~]# du -s -h /usr/*

142M /usr/bin

0 /usr/etc

0 /usr/games

14M /usr/include

1.2G /usr/lib

1.1G /usr/lib64

110M /usr/libexec

4.0K /usr/local

63M /usr/sbin

1.3G /usr/share

60M /usr/src

0 /usr/tmp

  1. iostat

iostat命令是I/O
statistics(输入/输出统计)的缩写,主要用于监控并统计系统设备的IO负载情况及CPU负载情况,仅对系统的整体情况进行分析,不能对某个进程进行深入分析。主要用它来检查哪个设备有问题,哪个设备io有问题,用户可以通过指定统计的次数和时间来获得所需的统计信息。iostat属于sysstat软件包。可以用yum
install sysstat 直接安装。

基本语法:

语法功能描述
iostat + [选项]用于监控磁盘IO及CPU的负载情况 选项: -d :只显示磁盘使用情况; -c :只显示CPU使用情况; -k :以 KB 为单位显示 -m :以 MB 为单位显示 -t :显示统计的时间 -x :显示详细信息; -N :显示磁盘名称; -p :显示每个磁盘的详细信息,比如sda这个磁盘分了两个区,都要让它显示出来 数字n1 + 数字n2 :每隔n1秒统计一次,共统计n2次

案例:

[root@node-1 test]# iostat

Linux 3.10.0-862.el7.x86_64 (node-1) 2021年02月22日 _x86_64_ (2 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle

1.19 0.01 5.96 0.00 0.00 92.83

Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn

scd0 0.00 0.00 0.00 84 0

sda 0.46 10.85 11.63 2322489 2489371

dm-0 0.48 10.80 11.62 2311839 2487139

dm-1 0.00 0.01 0.00 2256 44

[root@node-1 test]# iostat -d

Linux 3.10.0-862.el7.x86_64 (node-1) 2021年02月22日 _x86_64_ (2 CPU)

Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn

scd0 0.00 0.00 0.00 84 0

sda 0.46 10.85 11.63 2322489 2489371

dm-0 0.48 10.80 11.62 2311839 2487139

dm-1 0.00 0.01 0.00 2256 44

[root@node-1 test]# iostat -c

Linux 3.10.0-862.el7.x86_64 (node-1) 2021年02月22日 _x86_64_ (2 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle

1.19 0.01 5.96 0.00 0.00 92.83

[root@node-1 test]# iostat -d -m

Linux 3.10.0-862.el7.x86_64 (node-1) 2021年02月22日 _x86_64_ (2 CPU)

Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn

scd0 0.00 0.00 0.00 0 0

sda 0.46 0.01 0.01 2268 2431

dm-0 0.48 0.01 0.01 2257 2428

dm-1 0.00 0.00 0.00 2 0

[root@node-1 test]# iostat -t

Linux 3.10.0-862.el7.x86_64 (node-1) 2021年02月22日 _x86_64_ (2 CPU)

2021年02月22日 09时51分16秒

avg-cpu: %user %nice %system %iowait %steal %idle

1.19 0.01 5.96 0.00 0.00 92.83

Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn

scd0 0.00 0.00 0.00 84 0

sda 0.46 10.84 11.62 2322489 2489500

dm-0 0.48 10.79 11.61 2311839 2487268

dm-1 0.00 0.01 0.00 2256 44

解析:

结果分为两部分:cpu统计信息、设备统计信息。

%user:用户模式下所花费CPU时间的百分比,合理值为<60%

%nice:用户进程改变过优先级的进程占用CPU时间的百分比

%system:内核进程所花费的CPU时间的百分比,合理值为%user+%system <80%

%iowait:IO等待所占用的CPU时间的百分比(重要),合理值为<30%(不同功能的服务器不同,比如邮件服务器会比该值要大)

%steal:丢失时间占用CPU时间的百分比

一般来说%idle持续游走在20%以下,说明CPU繁忙,空闲太少,瓶颈出现在CPU的性能层面。%iowait高而%idle
在70%以上,说明cpu不忙,但是数据还在等待读写,瓶颈出现在IO设备层面,也就是磁盘有问题。

Device:设备名称,这里还有个dm,它是disk
mapper的缩写,可以在/dev/mapper下查对应关系,或者使用iostat -N
直接显示出磁盘分区对应关系。

tps:设备每秒接受的I/O传输请求tps = transfers per second

kB_read/s设备每秒读取的数据量(KB),参数-m可以换成MB

kB_wrtnls设备每秒写入的数据量(KB),参数-m可以换成MB

kB_read设备读取的总数据量

kB_wrtn设备写入的总数据量

[root@node-1 test]# iostat -N

Linux 3.10.0-862.el7.x86_64 (node-1) 2021年02月22日 _x86_64_ (2 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle

1.19 0.01 5.97 0.00 0.00 92.82

Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn

scd0 0.00 0.00 0.00 84 0

sda 0.46 10.83 11.61 2322489 2489556

centos-root 0.48 10.78 11.60 2311839 2487324

centos-swap 0.00 0.01 0.00 2256 44

查看具体对应关系

[root@node-1 ~]# cd /dev/mapper/

[root@node-1 mapper]# ll

总用量 0

lrwxrwxrwx. 1 root root 7 1月 28 19:26 centos-root -> …/dm-0

lrwxrwxrwx. 1 root root 7 1月 28 19:26 centos-swap -> …/dm-1

crw-------. 1 root root 10, 236 1月 28 19:26 control

直接输入iostat命令统计的是自系统启动以来的数据,而不是此时此刻的数据,要想统计近实时的结果,可以采用类似如下命令

**iostat 2
3:**每隔2秒统计一次,总共统计3次,第一次的结果是自系统启动以来的统计,我们看得是包括第二次及以后的统计。为了实现更准确的结果,也可以把统计的间隔设置的大一点,例如每隔10s统计一下,iostat
10 3

[root@node-1 test]# iostat 2 3

Linux 3.10.0-862.el7.x86_64 (node-1) 2021年02月22日 _x86_64_ (2 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle

1.19 0.01 5.97 0.00 0.00 92.82

Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn

scd0 0.00 0.00 0.00 84 0

sda 0.46 10.81 11.59 2322489 2489606

dm-0 0.48 10.77 11.58 2311839 2487374

dm-1 0.00 0.01 0.00 2256 44

avg-cpu: %user %nice %system %iowait %steal %idle

3.79 0.00 8.08 0.00 0.00 88.13

Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn

scd0 0.00 0.00 0.00 0 0

sda 0.00 0.00 0.00 0 0

dm-0 0.00 0.00 0.00 0 0

dm-1 0.00 0.00 0.00 0 0

avg-cpu: %user %nice %system %iowait %steal %idle

3.29 0.00 8.35 0.00 0.00 88.35

Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn

scd0 0.00 0.00 0.00 0 0

sda 0.00 0.00 0.00 0 0

dm-0 0.00 0.00 0.00 0 0

dm-1 0.00 0.00 0.00 0 0

上边我们得出了各种参数,可以根据这些参数,判断此时系统的io负载,是不是超过了经验值,下表给出了大多数机械硬盘不同驱动器、不同block大小的极限值,此处的r是指随机读写,如果超过了这些值则认为系统io负载过重,需要优化io读写。

例如,我们的磁盘是SATA/7200,格式化时block是512字节,此时的tps极限值区间为47-63,如果根据iostat得出的tps是80,则此时磁盘承受的读写太重了,需要降低读写频率,或者我们根据iostat得出的读速率是50M/s,写速率是20M/s,那么读写总共70M/s,则明显超过了吞吐量24.3-32.1的范围,那么也能够说明,读写过重了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UcVYNCHI-1639988203265)(media/7c61ca4fcc1dadc2997cce58fd3847b7.png)]

附:

每秒IO吞吐量= TPS x I/O传输大小(注:不是格式化时block的大小)

TPS:一秒内对磁盘进行多少次IO读写

每秒IO吞吐量:每秒磁盘I/O的流量,即磁盘写入+读出的数据的大小

IO传输大小:由程序决定,程序可以发送4K的IO,也可以是1MB的
lO,跟block多大没关系,程序会对其优化。

高级用法:

[root@node-1 ~]# iostat -d -x -N -p

-d:只显示磁盘信息,不显示cpu了,

-x:显示详细信息

-N:显示名称

-p:显示每个磁盘的详细信息,比如sda这个磁盘分了两个区,都要让它显示出来

[root@node-1 test]# iostat -d -x -N -p

Linux 3.10.0-862.el7.x86_64 (node-1) 2021年02月22日 _x86_64_ (2 CPU)

Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await
w_await svctm %util

scd0 0.00 0.00 0.00 0.00 0.00 0.00 9.88 0.00 0.94 0.94 0.00 0.94 0.00

sda 0.00 0.03 0.15 0.31 10.81 11.59 96.64 0.00 0.49 0.67 0.40 0.23 0.01

sda1 0.00 0.00 0.01 0.00 0.03 0.01 8.74 0.00 0.09 0.07 0.89 0.09 0.00

sda2 0.00 0.03 0.14 0.31 10.78 11.58 98.33 0.00 0.50 0.70 0.40 0.23 0.01

centos-root 0.00 0.00 0.14 0.34 10.76 11.58 93.00 0.00 0.52 0.71 0.43 0.22 0.01

centos-swap 0.00 0.00 0.00 0.00 0.01 0.00 41.07 0.00 0.54 0.26 3.18 0.19 0.00

r/s+w/s:每秒完成的读写I/O设备次数,平均每秒服务的顾客数量

avgrq-sz:平均IO数据大小,平均每人买的早餐有多少

avgqu-sz:平均队列长度,单位时间里平均排队的人数

await:平均等待时间,每人买完早餐的平均等待时间

%util:I/O利用率,单位时间内早餐铺有人买早餐的时间比例

%util表示该设备有IO非空闲的时间比率,不考虑IO有多少,由于硬盘设备有并行处理多个I/O请求的能力,所以%util即使达到100%也不意味着设备饱和了。

这些参数中,最重要的是await参数,因为其它的都是过往的平均值,对我们之后读写数据参考意义不大,我们关心的是,如果现在要读写数据,要等待多长时间,那么这个值是多少才意味着我们系统有问题?

SSD await = 1ms左右

机械硬盘await =寻道延迟+旋转延迟+传输延迟

rpm值10000为8.38ms

8.38ms计算方法如下:

http://cseweb.ucsd.edu/classes/wi01/cse102/sol2.pdf

  1. free

基本语法:

语法功能描述
free + [选项]用于输出显示系统中内存的使用情况 选项: -b :以字节为存储单位对当前的内存使用情况输出 -k :以KB为存储单位对当前的内存使用情况输出 -m :以MB为存储单位对当前的内存使用情况输出 -g :以GB为存储单位对当前的内存使用情况输出 -h :以人类可读的方式输出 -s :指定以秒为时间单位,持续输出当前系统内存的使用状况,直到按下ctrl+c停止输出。 -t :输出物理内存加上虚拟内存的总和

案例:

[root@node-1 ~]# free

total used free shared buff/cache available

Mem: 4026164 577016 2970852 12672 478296 3122160

Swap: 4063228 0 4063228

[root@node-1 ~]# free -m

total used free shared buff/cache available

Mem: 3931 563 2901 12 467 3049

Swap: 3967 0 3967

[root@node-1 ~]# free -h

total used free shared buff/cache available

Mem: 3.8G 563M 2.8G 12M 467M 3.0G

Swap: 3.9G 0B 3.9G

解析:
Mem 行(第二行)是物理内存的使用情况。
Swap 行(第三行)是交换空间的使用情况。
total 列:显示系统总的可用物理内存和交换空间大小。
used 列:显示已经被使用的物理内存和交换空间。
free 列:显示还有多少物理内存和交换空间可用使用。
shared
列:显示被共享使用的物理内存大小,在linux里面有很多共享内存,比如一个libc库,很多程序调用,但实际只存一份。

buff/cache 列:显示被 buffer 和 cache
使用的物理内存大小,即buff/cache的意思是 buffer 和 cache之和。
available 列:显示还可以被应用程序使用的物理内存大小。

**关系:**total = used + free + buff/cache

其实 free 命令中输出的信息都来自于 /proc/meminfo 文件。/proc/meminfo
文件包含了更多更原始的信息,只是看起来不太直观。

[root@node-1 ~]# cat /proc/meminfo

MemTotal: 4026164 kB

MemFree: 2971140 kB

MemAvailable: 3122476 kB

Buffers: 3572 kB

Cached: 329624 kB

SwapCached: 0 kB

Active: 343248 kB

Inactive: 282788 kB

Active(anon): 294052 kB

Inactive(anon): 11456 kB

Active(file): 49196 kB

Inactive(file): 271332 kB

Unevictable: 0 kB

Mlocked: 0 kB

SwapTotal: 4063228 kB

SwapFree: 4063228 kB

Dirty: 0 kB

Writeback: 0 kB

AnonPages: 292892 kB

Mapped: 95228 kB

Shmem: 12672 kB

Slab: 145060 kB

SReclaimable: 71648 kB

SUnreclaim: 73412 kB

buffer/cache:buff/cache的意思是 buffer 和 cache之和。

buffer 指 Linux 内存的:Buffer cache,翻译为缓冲区缓存。

cache 指 Linux 内存的:Page cache,翻译为页面缓存。

buffer:

A buffer is something that has yet to be “written” to
disk.翻译过来就是:buffer是尚未“写入”到磁盘的东西。buffer是为了提高内存和硬盘(或其他I/O设备)之间的数据交换的速度而设计的。buffer将数据缓冲下来,解决速度慢和快的交接问题;速度快的需要通过缓冲区将数据一点一点传给速度慢的区域。例如:从内存中将数据往硬盘中写入,并不是直接写入,而是缓冲到一定大小之后刷入硬盘中。

cache:

A cache is something that has been “read” from the disk and stored for later
use.翻译过来就是:cache就是从磁盘读取数据然后存起来方便以后使用。cache实现数据的重复使用,速度慢的设备需要通过缓存将经常要用到的数据缓存起来,缓存下来的数据可以提供高速的传输速度给速度快的设备。例如:将硬盘中的数据读取出来放在内存的缓存区中,这样以后再次访问同一个资源,速度会快很多。

free与available

在 free 命令的输出中,有一个 free 列,同时还有一个 available
列。这二者到底有何区别?

free 是真正尚未被使用的物理内存数量。至于 available
就比较有意思了,它是从应用程序的角度看到的可用内存数量。Linux
内核为了提升磁盘操作的性能,会消耗一部分内存去缓存磁盘数据,就是我们介绍的
buffer 和 cache。所以对于内核来说,buffer 和 cache
都属于已经被使用的内存。当应用程序需要内存时,如果没有足够的 free
内存可以用,内核就会从 buffer 和 cache
中回收内存来满足应用程序的请求。所以从应用程序的角度来说,available = free +
buffer +
cache。请注意,这只是一个很理想的计算方式,实际中的数据往往有较大的误差。

交换空间(swap space)

swap space
是磁盘上的一块区域,可以是一个分区,也可以是一个文件。所以具体的实现可以是 swap
分区也可以是 swap 文件。当系统物理内存吃紧时,Linux
会将内存中不常访问的数据保存到 swap
上,这样系统就有更多的物理内存为各个进程服务,而当系统需要访问 swap
上存储的内容时,再将 swap
上的数据加载到内存中,这就是常说的换出和换入。交换空间可以在一定程度上缓解内存不足的情况,但是它需要读写磁盘数据,所以性能不是很高。

如何回收 cache ?

Linux
内核会在内存将要耗尽的时候,触发内存回收的工作,以便释放出内存给急需内存的进程使用。一般情况下,这个操作中主要的内存释放都来自于对
buffer /cache 的释放。尤其是被使用更多的 cache
空间。既然它主要用来做缓存,只是在内存够用的时候加快进程对文件的读写速度,那么在内存压力较大的情况下,当然有必要清空释放
cache ,作为 free 空间分给相关进程使用。所以一般情况下,我们认为 buffer/cache
空间可以被释放,这个理解是正确的。

但是这种清缓存的工作也并不是没有成本。理解 cache
是干什么的就可以明白清缓存必须保证 cache 中的数据跟对应文件中的数据一致,才能对
cache 进行释放。所以伴随着 cache 清除的行为的,一般都是系统 IO
飙高。因为内核要对比 cache
中的数据和对应硬盘文件上的数据是否一致,如果不一致需要写回,之后才能回收。

在系统中除了内存将被耗尽的时候可以清缓存以外,我们还可以使用下面这个文件来人工触发缓存清除的操作:

清除 pagecache:

[root@node-1 ~]# echo 1 > /proc/sys/vm/drop_caches

清除slab 分配器中的对象(包括dentries目录项缓存和 inode文件项缓存)。
为了直接获得列表,操作系统可以去dentries目录缓存和inode文件缓存中读取某个目录下的文件列表。如果没有,则会去磁盘上将其读入内存,以便可以重复使用:

[root@node-1 ~]# echo 2 > /proc/sys/vm/drop_caches

清除所有(pagecache 和 slab 分配器中)的缓存对象:

[root@node-1 ~]# echo 3 > /proc/sys/vm/drop_caches

  1. fdisk

基本语法:

语法功能描述
fdisk + 选项用于查看磁盘分区详情 选项: -l :列出分区表;

案例:

[root@node-1 ~]# fdisk -l

磁盘 /dev/sda:53.7 GB, 53687091200 字节,104857600 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘标签类型:dos

磁盘标识符:0x0001be6b

设备 Boot Start End Blocks Id System

/dev/sda1 * 2048 2099199 1048576 83 Linux

/dev/sda2 2099200 104857599 51379200 8e Linux LVM

磁盘 /dev/mapper/centos-root:48.4 GB, 48444211200 字节,94617600 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘 /dev/mapper/centos-swap:4160 MB, 4160749568 字节,8126464 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

Device:分区序列

Boot:引导

Start:从X磁柱开始

End:到Y磁柱结束

Blocks:容量

Id:分区类型ID

System:分区类型

  1. mount

如果Linux外接了多个磁盘,比如插入了U盘,或者光驱,此时它并不是Linux文件系统的一部分,必须通过一种叫做“挂载”的操作,让该磁盘变为Linux文件系统的一部分才能够使用。此命令的最常用于挂载cdrom,使我们可以访问cdrom中的数据,因为你将光盘插入cdrom中,Linux并不会自动挂载,必须使用Linux
mount命令来手动完成挂载。

挂载前准备(必须要有光盘或者已经连接镜像文件)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s1lOWIfa-1639988203266)(media/1c1a20459cf7e5159fd0ea5044bc7870.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aKmebDRu-1639988203267)(media/237174491e03142e6076ee310128074a.png)]

基本语法:

语法功能描述
mount + [选项] + [参数]让外部设备(如外部磁盘)变为Linux文件系统的一部分

使用说明:

mount [-t vfstype] [-o options] device dir

  1. -t vfstype 指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。

    常用类型有:

    光盘或光盘镜像:iso9660

    DOS fat16文件系统:msdos

    Windows 9x
    fat32文件系统:vfat

    Windows NT ntfs文件系统:ntfs

    Mount
    Windows文件网络共享:smbfs

    UNIX(LINUX)
    文件网络共享:nfs

  2. -o options 主要用来描述设备或档案的挂接方式。常用的参数有:

    loop:用来把一个文件当成硬盘分区挂接上系统

ro:采用只读方式挂接设备

rw:采用读写方式挂接设备

iocharset:指定访问文件系统所用字符集

  1. device 要挂接(mount)的设备

  2. dir设备在系统上的挂接点(mount point)

案例:

先创建要挂载的目录,然后将光驱挂载到该目录。

[root@node-1 ~]# mkdir /mnt/mycdrom

[root@node-1 ~]# mount -t iso9660 -o /dev/sr0 /mnt/mycdrom/

[root@node-1 ~]# ls /mnt/mycdrom/

CentOS_BuildTag EULA images LiveOS repodata RPM-GPG-KEY-CentOS-Testing-7

EFI GPL isolinux Packages RPM-GPG-KEY-CentOS-7 TRANS.TBL

  1. umount

基本语法:

语法功能描述
umount + 路径用于卸载已经加载的文件系统

案例:

[root@node-1 ~]# umount /dev/sr0 或者umount /mnt/mycdrom

卸载时,如果该目录正在被使用,可能无法卸载,可以通过fuser命令找到占用该目录的进程,将其kill,再进行卸载,下边3475是指占用该目录的进程id,c代表目录正在被占用,除了c之外,还有其他含义:

* c: current directory.

* e: executable being run.

* f: open file. f is omitted in default display mode.

* F: open file for writing. F is omitted in default display mode.

* r: root directory.

* m: mmap’ed file or shared library.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tvATf8vS-1639988203267)(media/6e5d2259936bf9313a0274f449b218f6.png)]

  1. mkfs

什么是格式化、格式化的目的是什么 ?

为磁盘写入【创建】文件系统

基本语法:

语法功能描述
mkfs + 选项 + 参数用于在设备上(通常为硬盘)创建Linux文件系统 即格式化分区

将Linux关机,添加一块硬盘

[root@node-1 ~]# poweroff

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vsRWCqMN-1639988203272)(media/4fd5adf766ecc213f82b79446087d774.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t6xkbzts-1639988203273)(media/3eba560b9991e5edc375f095e231c60e.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lvQ6xOv7-1639988203274)(media/a158611be660108eae7ebd9031d1a59a.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tnuq0Cal-1639988203275)(media/790b643a8d9f1b0d73be1dd0cc610d5b.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ylP3umQZ-1639988203275)(media/7f517fbd5d8452415968d3bc2564f95f.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LFb50eqL-1639988203276)(media/4d23694404afae8a9632f0dbafe4a4d8.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LrPenXUC-1639988203277)(media/0f2585ddcdf94dc251c027360404c73f.png)]

添加完毕之后,将Linux开机,开机后,可以看到多出一块硬盘

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mdb2Kjmw-1639988203277)(media/4d6bdc1e9c8341043a5a7d4639ddebca.png)]

接下来,按照如下步骤创建硬盘信息

  1. 输入命令:fdisk /dev/sdb

  2. 按n添加分区,选p(主分区);

  3. 选1,也就是sdb1;

  4. 然后就是空间划分,一路回车。默认是使用整个磁盘空间。

  5. 然后按w写入分区信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hCDxtzLz-1639988203278)(media/4c0d8098e27abdab23f23396047e2c99.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZPY4wuBf-1639988203278)(media/0521ddc95ff757be66904e0bc11f583c.png)]

格式化磁盘

[root@node-1 ~]# mkfs -t ext3 /dev/sdb1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ik1dji5i-1639988203279)(media/f434c297bafd41e5b4614ac23203c7d4.png)]

创建需要mount的目录,并将新磁盘挂载到该目录

[root@node-1 ~]# mkdir -p /mnt/myseconddisk

[root@node-1 ~]# mount /dev/sdb1 /mnt/myseconddisk -o rw

如果需要每次启动加载,在**/etc/fstab**文件最后一行添加

设备挂载点文件系统类型挂载参数是否备份是否检测
/dev/sdb1/mnt/myseconddiskext3defaults00

/dev/sdb1 /media/mydisk ext3 defaults 0 0

9、搜索查找类命令

(1)find

基本语法:

语法功能描述
find + 选项 + 参数在指定目录下查找文件 选项: -name + filename :查找名为filename的文件 -user + username :按文件属主来查找 -group + groupname :按组来查找 -type b/d/c/p/l/f :查是块设备、目录、字符设备、管道、链接、普通文件 -size + n[c] :查长度为n块[或n字节]的文件

案例:

**按名称查找:**查找/root目录以及子目录下包含cf的文件

[root@node-1 ~]# find /root/ -name ‘*cf*’

查找当前目录以及子目录下以.cfg为后缀的文件

[root@node-1 ~]# find . -name ‘*.cfg’

按用户名查找

[root@node-1 ~]# touch aa.txt

[root@node-1 ~]# chown -R offcn:root aa.txt

查找当前目录以及子目录属主为offcn的文件

[root@node-1 ~]# find . -user offcn

按组名查找

查找当前目录以及子目录属组为root的文件

[root@node-1 ~]# find . -group root

按文件类型查找

查找/root目录以及子目录的普通文件

[root@node-1 ~]# find /root/ -type f

查找/dev目录以及子目录的块设备

[root@node-1 ~]# find /dev -type b

查找/dev目录以及子目录的链接

[root@node-1 ~]# find /dev -type l

查找/dev目录以及子目录的目录

[root@node-1 ~]# find /mnt -type d

按文件大小查找

查找/root目录及子目录下大于150M的文件,

大于用+,

等于只写具体大小,

小于用-,

默认的单位是512字节的块b(小写),字节Byte用c(小写);千字节(kB)用k(小写)
,MB用M(大写);

[root@node-1 ~]# find /root/ -size +150M

(2)locate

该命令其实是find
-name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令[管理员权限执行],手动更新数据库。

基本语法:

语法功能描述
locate + 文件名称从Linux自带的数据库中查找文件

案例:

[root@node-1 ~]# locate anaconda-ks.cfg

/root/anaconda-ks.cfg

[root@node-1 ~]# touch bb.txt

[root@node-1 ~]# locate bb.txt

[root@node-1 ~]# updatedb

[root@node-1 ~]# locate bb.txt

/root/bb.txt

查找包含txt的文件和目录

[root@node-1 ~]# locate txt

(3)grep

该命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来,它通常配合管道符一块使用。

管道符,“|”,表示将前一个命令的处理结果输出传递给后面的命令处理

基本语法:

语法功能描述
grep + [选项] + [参数]对文件内容或标准输入的内容根据条件按行匹配查找内容 选项: -c :显示有多少行被匹配到[不要和其他参数同时使用,否则只显示匹配的行数] -n :显示行号 -i :忽略大小写 -v :反向搜索,即不显示要搜索的东西 --color : 匹配到的内容高亮显示

案例:

[root@node-1 ~]# ll | grep txt

-rw-r–r--. 1 offcn root 0 1月 28 20:19 aa.txt

-rw-r–r--. 1 root root 0 1月 28 20:39 bb.txt

[root@node-1 ~]# ll | grep -n txt

2:-rw-r–r--. 1 offcn root 0 1月 28 20:19 aa.txt

4:-rw-r–r--. 1 root root 0 1月 28 20:39 bb.txt

[root@node-1 ~]# ll | grep TXT

[root@node-1 ~]# ll | grep -i TXT

-rw-r–r--. 1 offcn root 0 1月 28 20:19 aa.txt

-rw-r–r--. 1 root root 0 1月 28 20:39 bb.txt

[root@node-1 ~]# ll | grep -v txt

总用量 181176

-rw-------. 1 root root 1709 1月 27 14:31 anaconda-ks.cfg

drwxr-xr-x. 2 root root 6 1月 28 20:02 df

drwxr-xr-x. 2 root root 21 1月 28 19:45 haha

-rw-r–r--. 1 root root 1740 1月 27 14:34 initial-setup-ks.cfg

-rw-r–r--. 1 root root 185515842 8月 19 2017 jdk-8u144-linux-x64.tar.gz

drwxr-xr-x. 2 root root 6 1月 27 14:35 公共

drwxr-xr-x. 2 root root 6 1月 27 14:35 模板

drwxr-xr-x. 2 root root 6 1月 27 14:35 视频

drwxr-xr-x. 2 root root 6 1月 27 14:35 图片

drwxr-xr-x. 2 root root 6 1月 27 14:35 文档

drwxr-xr-x. 2 root root 6 1月 27 14:35 下载

drwxr-xr-x. 2 root root 6 1月 27 14:35 音乐

drwxr-xr-x. 3 root root 77 1月 27 17:02 桌面

  1. which

基本语法:

语法功能描述
which + 命令查找并显示某个系统命令是否存在,以及显示给定命令的绝对路径

案例:

[root@node-1 ~]# which date

/usr/bin/date

[root@node-1 ~]# which ls

alias ls=‘ls --color=auto’

/usr/bin/ls

  1. whereis

用来定位指令的二进制程序、源代码文件和man手册页等相关文件的路径。如果省略选项,则返回所有信息。

基本语法:

语法功能描述
where + [选项] + [参数]用来定位指令的二进制程序、源代码文件和man手册页等相关文件的路径。如果省略选项,则返回所有信息。 选项: -b :搜索二进制文件 -m :搜索man说明文件 -s :搜索源代码文件

案例:

[root@node-1 ~]# whereis python

python: /usr/bin/python /usr/bin/python2.7 /usr/lib/python2.7
/usr/lib64/python2.7 /etc/python /usr/include/python2.7
/usr/share/man/man1/python.1.gz

[root@node-1 ~]# whereis -b python

python: /usr/bin/python /usr/bin/python2.7 /usr/lib/python2.7
/usr/lib64/python2.7 /etc/python /usr/include/python2.7

[root@node-1 ~]# whereis -m python

python: /usr/share/man/man1/python.1.gz

[root@node-1 ~]# whereis -s python

10、进程线程类命令
  1. ps

即process
status,用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。

基本语法:

语法功能描述
ps + [选项]查看当前系统的进程状态 选项: -a :显示现行终端机下的所有程序,包括其他用户的程序。 -u :以用户为主的格式来显示程序状况。 -x :显示所有程序,不以终端机来区分。

案例:

[root@node-1 ~]# ps -aux

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 1 0.0 0.1 194164 7216 ? Ss 1月28 0:03 /usr/lib/systemd/systemd --switched-

root 2 0.0 0.0 0 0 ? S 1月28 0:00 [kthreadd]

root 3 0.0 0.0 0 0 ? S 1月28 0:02 [kworker/0:0]

root 4 0.0 0.0 0 0 ? S< 1月28 0:00 [kworker/0:0H]

root 6 0.0 0.0 0 0 ? S 1月28 0:00 [ksoftirqd/0]

root 7 0.0 0.0 0 0 ? S 1月28 0:06 [migration/0]

解析:

USER:该进程是由哪个用户产生的

PID:进程的ID号

%CPU:该进程占用CPU资源的百分比,占用越高,进程越耗费资源

%MEM:该进程占用物理内存的百分比,占用越高,进程越耗费资源;

VSZ:该进程占用虚拟内存的大小,单位KB

RSS:该进程占用实际物理内存的大小,单位KB

TTY:该进程是在哪个终端中运行的。其中tty1-tty7代表本地控制台终端,tty1-tty6是本地的字符界面终端,tty7是图形终端。pts/0-255代表虚拟终端。

STAT:进程状态。常见的状态有:R:运行、S:睡眠、T:停止状态、s:包含子进程、+:位于后台

START:该进程的启动时间

TIME:该进程占用CPU的运算时间,注意不是系统时间

COMMAND:产生此进程的命令名

另外,也可以使用ps -ef,

那么ps -ef 和ps -aux 有什么区别呢?

其实区别不是很大,这就要追溯到Unix系统中的两种风格,System V风格和BSD 风格,ps
aux最初用到Unix Style中,而ps -ef被用在System V
Style中,两者输出略有不同。目前大部分Linux系统都是支持使用这两种方式。

[root@node-1 ~]# ps -ef

UID PID PPID C STIME TTY TIME CMD

root 1 0 0 1月28 ? 00:00:03 /usr/lib/systemd/systemd --switched-root --system
–d

root 2 0 0 1月28 ? 00:00:00 [kthreadd]

root 3 2 0 1月28 ? 00:00:02 [kworker/0:0]

root 4 2 0 1月28 ? 00:00:00 [kworker/0:0H]

root 6 2 0 1月28 ? 00:00:00 [ksoftirqd/0]

root 7 2 0 1月28 ? 00:00:06 [migration/0]

root 8 2 0 1月28 ? 00:00:00 [rcu_bh]

  1. pstree

基本语法:

语法功能描述
pstree + [选项]以树状图的方式比较直观的展现进程之间的派生关系 选项: -p :显示进程的PID -u :显示进程的所属用户

注: 如果提示找不到pstree命令 使用 yum -y install psmisc 安装

案例:

[root@node-1 ~]# pstree -u

[root@node-1 ~]# pstree -p

  1. top

可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理。

基本语法:

语法功能描述
top + [选项]实时动态地查看系统的整体运行情况选项: -d + 秒数 :指定top命令每隔几秒更新。默认是3秒。 -i :使top不显示任何闲置或者僵死进程。 -p :通过指定监控进程ID来仅仅监控某个进程的状态。 按键操作: P :以CPU使用率排序,默认就是此项 M :以内存的使用率排序 N :以PID排序 q :退出top R :按某列颠倒顺序排序

案例:

[root@node-1 ~]# top

top - 13:52:47 up 18:26, 2 users, load average: 0.00, 0.01, 0.05

Tasks: 214 total, 1 running, 213 sleeping, 0 stopped, 0 zombie

%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

KiB Mem : 4026164 total, 2774228 free, 579048 used, 672888 buff/cache

KiB Swap: 4063228 total, 4063228 free, 0 used. 3117360 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

839 root 20 0 246628 6656 5184 S 0.3 0.2 0:45.76 vmtoolsd

1 root 20 0 194164 7216 4152 S 0.0 0.2 0:03.77 systemd

2 root 20 0 0 0 0 S 0.0 0.0 0:00.03 kthreadd

3 root 20 0 0 0 0 S 0.0 0.0 0:02.66 kworker/0:0

4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H

6 root 20 0 0 0 0 S 0.0 0.0 0:00.38 ksoftirqd/0

7 root rt 0 0 0 0 S 0.0 0.0 0:06.83 migration/0

8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh

9 root 20 0 0 0 0 S 0.0 0.0 0:02.50 rcu_sched

10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain

11 root rt 0 0 0 0 S 0.0 0.0 0:00.19 watchdog/0

[root@node-1 ~]# top -d 1

[root@node-1 ~]# top -i

[root@node-1 ~]# top -p 2575

解析:

第一行信息为任务队列信息

内容说明
12:26:46系统当前时间
up 1 day, 13:32系统的运行时间,本机已经运行1天 13小时32分钟
2 users当前登录了两个用户
load average: 0.00, 0.00, 0.00系统在之前1分钟,5分钟,15分钟的平均负载。一般认为小于1时,负载较小。如果大于1,系统已经超出负荷。

第二行为进程信息

Tasks: 95 total系统中的进程总数
1 running正在运行的进程数
94 sleeping睡眠的进程
0 stopped正在停止的进程
0 zombie僵尸进程。如果不是0,需要手工检 查僵尸进程

第三行为CPU信息

Cpu(s): 0.1%us用户模式占用的CPU百分比
0.1%sy系统模式占用的CPU百分比
0.0%ni改变过优先级的用户进程占用的CPU百分比
99.7%id空闲CPU的CPU百分比
0.1%wa等待输入/输出的进程的占用CPU百分比
0.0%hi硬中断请求服务占用的CPU百分比
0.1%si软中断请求服务占用的CPU百分比
0.0%stst(Steal time)虚拟时间百分比。就是当有虚拟机时,虚拟CPU等待实际CPU的时间百分比。

第四行为物理内存信息

Mem: 625344k total物理内存的总量,单位KB
571504k used已经使用的物理内存数量
53840k free空闲的物理内存数量,我们使用的是虚拟机,总共只分配了628MB内存,所以只有53MB的空闲内存了
65800k buffers作为缓冲的内存数量

第五行为交换分区(swap)信息

Swap: 524280k total交换分区(虚拟内存)的总大小
0k used已经使用的交互分区的大小
524280k free空闲交换分区的大小
409280k cached作为缓存的交互分区的大小
  1. netstat

基本语法:

语法功能描述
netstat + [选项]显示Linux中网络系统的状态信息 选项: -a :显示所有通信状态的进程 -n :以数字化的方式显示 -p :显示pid -t :显示tcp协议通信的进程 -l :显示listen状态的进程

案例:

[root@node-1 ~]# netstat -anp

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 801/rpcbind

tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1757/dnsmasq

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1423/sshd

tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1429/cupsd

tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1660/master

tcp 0 0 192.168.168.111:22 192.168.168.1:8586 ESTABLISHED 2168/sshd: root@pts

tcp 0 52 192.168.168.111:22 192.168.168.1:8942 ESTABLISHED 2378/sshd: root@pts

[root@node-1 ~]# netstat -nltp|grep 22

tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1757/dnsmasq

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1423/sshd

tcp6 0 0 :::22 ::😗 LISTEN 1423/sshd

  1. kill

基本语法:

语法功能描述
kill + [选项] + 参数停止执行中的程序或工作 选项: -9 :表示强迫进程立即停止

案例:

启动firefox浏览器程序,找到其pid,并将该程序停掉。

[root@node-1 ~]# ps -ef |grep firefox

root 15277 14281 19 14:17 ? 00:00:02 /usr/lib64/firefox/firefox

root 15355 15277 4 14:17 ? 00:00:00 /usr/lib64/firefox/plugin-container -greomni
/usr/lib64/firefox/omni.ja -appomni /usr/lib64/firefox/browser/omni.ja -appdir
/usr/lib64/firefox/browser 15277 tab

root 15422 2388 0 14:17 pts/1 00:00:00 grep --color=auto firefox

[root@node-1 ~]# kill -9 15277

11、压缩和解压类命令
  1. gzip/gunzip压缩

基本语法:

语法功能描述
gzip + 文件压缩文件,只能将文件压缩为*.gz文件,执行后,原来文件消失,生成压缩文件
gunzip + 文件.gz解压缩文件命令,执行后,压缩文件消失,生成解压后的文件

特点:

(1)只能压缩文件不能压缩目录

(2)不保留原来的文件

案例:

gzip压缩

[root@node-1 ~]# cd /opt/

[root@node-1 opt]# ll

总用量 0

drwxr-xr-x. 2 root root 6 9月 7 2017 rh

[root@node-1 opt]# touch test.java

[root@node-1 opt]# ls

rh test.java

[root@node-1 opt]# gzip test.java

[root@node-1 opt]# ll

总用量 4

drwxr-xr-x. 2 root root 6 9月 7 2017 rh

-rw-r–r--. 1 root root 30 1月 29 14:43 test.java.gz

gunzip解压缩文件

[root@node-1 opt]# gunzip test.java.gz

[root@node-1 opt]# ll

总用量 0

drwxr-xr-x. 2 root root 6 9月 7 2017 rh

-rw-r–r--. 1 root root 0 1月 29 14:43 test.java

  1. zip/unzip

基本语法:

语法功能描述
zip + [选项] + 参数压缩文件或目录,压缩后会另外产生具有“.zip”扩展名的压缩文件,会保留原来的文件 选项: -r :压缩目录
unzip + 文件 + [选项] + [参数]解压缩文件或目录,执行后,会保留原来的文件 选项: -d + 路径 :解压到指定路径下

案例:

压缩

[root@node-1 opt]# touch 1.txt 2.txt

[root@node-1 opt]# mkdir test

[root@node-1 opt]# touch test/3.txt

[root@node-1 opt]# zip -r my.zip 1.txt 2.txt test

adding: 1.txt (stored 0%)

adding: 2.txt (stored 0%)

adding: test/ (stored 0%)

adding: test/3.txt (stored 0%)

解压

[root@node-1 opt]# unzip my.zip

-d参数指定解压到/tmp目录,如果目标目录存在相同文件,则会提示输入相应字母进行相关操作。

输入y,替换当前文件,

输入n,不替换当前文件,

输入A,全部替换,

输入N,全不替换,

输入r,对当前文件重命名

[root@node-1 opt]# unzip my.zip -d /tmp/

Archive: my.zip

replace /tmp/1.txt? [y]es, [n]o, [A]ll, [N]one, [r]ename: A

extracting: /tmp/1.txt

extracting: /tmp/2.txt

extracting: /tmp/test/3.txt

  1. tar

基本语法:

语法功能描述
tar + 选项 + 参数为linux的文件或目录创建压缩包 选项: -c :产生.tar打包文件 create -v :显示详细信息 verbose -f :指定压缩后的文件名 filename -z :打包同时压缩 -x :解包.tar文件

案例:

将1.txt 2.txt my.zip test压缩到my.tar.gz

[root@node-1 opt]# tar -zcvf my.tar.gz 1.txt 2.txt my.zip test

将my.tar.gz解压到当前目录

[root@node-1 opt]# tar -zxvf my.tar.gz

加-C参数指定解压到/tmp目录

[root@node-1 opt]# tar -zxvf my.tar.gz -C /tmp/

12、后台服务管理类命令
  1. service(centos6旧命令)

基本语法:

语法功能描述
service + 服务名 + 指令用来临时启动、停止、重新启动和关闭系统服务,以及显示系统服务的当前状态。 使用: service 服务名 start :开启服务 service 服务名 stop :关闭服务 service 服务名 restart :重新启动服务 service 服务名 status :查看服务状态

案例:

查看防火墙服务状态

防火墙 : 6: iptables 7: firewalld

[root@node-1 ~]# service firewalld status

关闭防火墙服务

[root@node-1 ~]# service firewalld stop

启动防火墙服务

[root@node-1 ~]# service firewalld start

重启防火墙服务

[root@node-1 ~]# service firewalld restart

  1. chkconfig(centos6旧命令)

基本语法:

语法功能描述
chkconfig + 服务名 + 指令检查、设置系统的各种服务自启状态 使用: chkconfig :查看所有服务器自启配置 chkconfig 服务名 off :关掉指定服务的自动启动 chkconfig 服务名 on :开启指定服务的自动启动 chkconfig 服务名 --list :查看服务开机启动状态

案例:

查看防火墙服务的开机自启状态

[root@node-1 ~]# chkconfig iptables --list

设置防火墙服务开机自启

[root@node-1 ~]# chkconfig iptables on

设置防火墙服务开机不自启

[root@node-1 ~]# chkconfig iptables off

以下是在centos7上执行有关防火墙的开机自启设置

查看防火墙服务的开机自启状态,centos7无法使用chkconfig iptables --list命令,用
systemctl is-enabled firewalld代替。CentOS
7默认的防火墙是firewalld,不是iptables。如果想使用iptables,首先应该停用默认的firewalld,然后安装iptables服务,并且开启80端口、3306端口等。

[root@node-1 ~]# systemctl is-enabled firewalld

设置防火墙服务开机自启

[root@node-1 ~]# chkconfig firewalld on

设置防火墙服务开机不自启

[root@node-1 ~]# chkconfig firewalld off

  1. systemctl(centos7新命令)

基本语法:

语法功能描述
systemctl + 指令 + 服务名系统服务管理器指令,将service和chkconfig这两个命令组合到一起。既能临时启停服务,也能设置开机自启。 使用: systemctl start 服务名 :开启服务 systemctl stop 服务名 :关闭服务 systemctl restart 服务名 :重新启动服务 systemctl status 服务名 :查看服务状态 systemctl --type service :查看正在运行的服务 systemctl list-unit-files :查看所有服务器自启配置 systemctl disable 服务名 :关掉指定服务的自动启动 systemctl enable 服务名 :开启指定服务的自动启动 systemctl is-enabled 服务名 :查看服务开机启动状态

案例:

临时启停服务

查看防火墙服务状态

[root@node-1 ~]# systemctl status firewalld

关闭防火墙

[root@node-1 ~]# systemctl stop firewalld

开启防火墙

[root@node-1 ~]# systemctl start firewalld

重启防火墙

[root@node-1 ~]# systemctl restart firewalld

查看所有正在运行的服务

[root@node-1 ~]# systemctl --type service

开机自启服务管理

查看防火墙服务的开机自启状态

[root@node-1 ~]# systemctl is-enabled firewalld

设置防火墙服务开机自启

[root@node-1 ~]# systemctl enable firewalld

设置防火墙服务开机不自启

[root@node-1 ~]#systemctl disable firewalld

  1. 服务后台执行

基本语法:

语法功能描述
命令 + &将命令放在后台执行

案例:

命令在前台执行,会阻塞我们继续输入命令。

[root@node-1 ~]# tail -f anaconda-ks.cfg

%addon com_redhat_kdump --disable --reserve-mb=‘auto’

%end

%anaconda

pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty

pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok

pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty

%end

将命令放在后台执行后,可以继续输入命令,只需要在要执行的命令后边加一个&符号,并在此敲击一个回车即可。

[root@node-1 ~]# tail -f anaconda-ks.cfg &

将命令放在后台执行后,可以通过jobs命令查看。

注意:jobs命令只能看到当前终端的后台进程,不能看到其它终端的后台进程。

[root@node-1 ~]# jobs -l

[1]+ 运行中 tail -f anaconda-ks.cfg &

如果将多个命令放到后台执行,就会看到多个,jobs加参数l,可以显示出进程pid。

解析:

第一列:例如
1、2、3、4,是jobs给每个进程的任务编号,+代表最新放入后台的进程,-代表次新进程。

第二列:例如 5521,是jobs每个进程的pid

第三列:例如,运行中、已停止,是该进程的状态

第四列:生成该进程的命令

[root@node-1 ~]# tail -f anaconda-ks.cfg &

[root@node-1 ~]# tail -f anaconda-ks.cfg &

[root@node-1 ~]# tail -f anaconda-ks.cfg &

[root@node-1 ~]# tail -f anaconda-ks.cfg &

[root@node-1 ~]# jobs -l

[1] 5521运行中 tail -f anaconda-ks.cfg &

[2] 5522 运行中 tail -f anaconda-ks.cfg &

[3]- 5523运行中 tail -f anaconda-ks.cfg &

[4]+ 5524运行中 tail -f anaconda-ks.cfg &

进程进入后台执行后,我们也可以将其通过fg命令,即foreground再调回前台执行,参数4代表任务编号,不是pid。

[root@node-1 ~]# fg 4

tail -f anaconda-ks.cfg

进程再次来到前台执行后,可以通过按下ctrl+z命令,将进程再次置于后台执行,只不过该进程会变成已停止状态,而此时如果按下ctrl+c命令的话,该进程会结束。

[root@node-1 ~]# fg 4

tail -f anaconda-ks.cfg

^Z

[4]+ 已停止 tail -f anaconda-ks.cfg

[root@node-1 ~]# jobs -l

[1] 5521 运行中 tail -f anaconda-ks.cfg &

[2] 5522 运行中 tail -f anaconda-ks.cfg &

[3] 5523 运行中 tail -f anaconda-ks.cfg &

[4]+ 5524 停止 tail -f anaconda-ks.cfg

要想让该进程继续运行,即恢复运行状态,则需要用到bg命令,即background。

[root@node-1 ~]# bg 4

[4]+ tail -f anaconda-ks.cfg &

[root@node-1 ~]# jobs -l

[1] 5521 运行中 tail -f anaconda-ks.cfg &

[2] 5522 运行中 tail -f anaconda-ks.cfg &

[3] 5523 运行中 tail -f anaconda-ks.cfg &

[4] 5524 运行中 tail -f anaconda-ks.cfg &

  1. nohup 命令

基本语法:

语法功能描述
nohup + 命令 + &将程序放在后台执行,不会因为终端关闭而结束

案例:

nohup指不断地运行,是no hang
up的缩写,指不间断,不挂断。运行一个进程的时候,不想让其在你退出账号时关闭,即可用nohup。

[root@node-1 ~]# nohup tail -f anaconda-ks.cfg >> /root/my.out 2>&1 &

解析:

&:&为后台运行

nohup:不间断的运行tail -f
anaconda-ks.cfg这个命令,并且将该命令输出的内容重定向输入my.out中(>>意为追加,如果用>会将以前的内容清空)

2>&1:2>&1是一个整体,>左右不能有空格,即将错误内容重定向输入到标准输出中去。0
表示stdin标准输入,用户键盘输入的内容,1
表示stdout标准输出,输出到显示屏的内容,2 表示stderr标准错误,报错内容。

整体含义:将tail -f
anaconda-ks.cfg命令放到后台不间断的运行,将该命令的标准错误和标准输出合并在一起,追加到my.out文件中

13、crontab系统定时任务

(1)crontab

用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。

基本语法:

语法功能描述
crontab + [选项]用来提交和管理用户的需要周期性执行的任务. 选项: -e :编辑crontab定时任务 -l :查询crontab任务 -r :删除当前用户所有的crontab任务 # remove移除

案例:

[root@node-1 ~]# crontab -l

  1. crontab表达式

当要周期性的执行某个任务的时候,需要指定时间,这个指定时间的表达式就是crontab表达式,用5个*来表示,即*
* * * *,每个*的具体含义如下:分时日月周

项目含义范围
第一个“*”一小时当中的第几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分钟就执行一遍命令

(3)案例分析

时间含义
15 20 * * * 命令在20点15分执行命令
1 17 * * 2 命令每周2 的17点1分执行命令
0 19 1,15 * * 命令每月1号和15号的19点0分执行命令
0 9 * * 1-5 命令每周一到周五的凌晨9点0分执行命令
*/10 5 * * * 命令每天的凌晨5点开始,到6点结束,每隔10分钟执行一次命令
0 0 1,15 * 1 命令每月1号和15号,每周1的0点0分都会执行命令。注意:星期几和几号最好不要同时出现,因为定义的都是天。非常容易让管理员混乱。

实操:

执行crontab -e,向里面添加周期性任务。添加时,使用方式跟vi编辑器相同。

[root@node-1 ~]# crontab -e

添加如下:

*/1 * * * * /bin/echo `date` >> /tmp/test.txt

可以通过查看/tmp/test.txt的内容验证定时任务有没有正确触发,也可以通过查看定时任务的调度日志验证。

[root@node-1 ~]# tail -f /var/log/cron

14、上传下载类
  1. sftp

是一款交互式的文件传输程序,命令的运行和使用方式与ftp命令相似,但是,sftp命令对传输的所有信息使用ssh加密,它还支持公钥认证和压缩等功能。

示例:

登录远端服务器,从node-1采用node-2的用户名root和密码登录node-2。node-1称之为本地服务器,node-2称之为远程服务器。

[root@node-1 ~]# sftp root@node-2

root@node-2’s password:

Connected to node-2.

sftp>

显示帮助信息

sftp> help

Available commands:

bye Quit sftp

cd path Change remote directory to ‘path’

chgrp grp path Change group of file ‘path’ to ‘grp’

chmod mode path Change permissions of file ‘path’ to ‘mode’

chown own path Change owner of file ‘path’ to ‘own’

df [-hi] [path] Display statistics for current directory or

filesystem containing ‘path’

exit Quit sftp

get [-afPpRr] remote [local] Download file

reget [-fPpRr] remote [local] Resume download file

reput [-fPpRr] [local] remote Resume upload file

help Display this help text

lcd path Change local directory to ‘path’

lls [ls-options [path]] Display local directory listing

lmkdir path Create local directory

ln [-s] oldpath newpath Link remote file (-s for symlink)

lpwd Print local working directory

ls [-1afhlnrSt] [path] Display remote directory listing

lumask umask Set local umask to ‘umask’

mkdir path Create remote directory

progress Toggle display of progress meter

put [-afPpRr] local [remote] Upload file

pwd Display remote working directory

quit Quit sftp

rename oldpath newpath Rename remote file

rm path Delete remote file

rmdir path Remove remote directory

symlink oldpath newpath Symlink remote file

version Show SFTP version

!command Execute ‘command’ in local shell

! Escape to local shell

? Synonym for help

显示远程工作目录

sftp> pwd

Remote working directory: /root

显示本地工作目录

sftp> lpwd

Local working directory: /root

切换远程工作目录

sftp> cd /opt/

sftp> pwd

Remote working directory: /opt

切换本地工作目录

sftp> lcd /tmp/

sftp> lpwd

Local working directory: /tmp

列出远程服务工作目录内容

sftp> ls

1.txt 2.txt Packages my.tar.gz my.zip rh test test.java

列出本地服务器工作目录内容

sftp> !ls

1.txt

2.txt

anaconda.log

firefox_root

hsperfdata_root

ifcfg.log

ks-script-r_cdEf

mozilla_root0

my.zip

packaging.log

program.log

sensitive-info.log

storage.log

yum.log

!command用法,当我们直接输入一个命令时,默认是操作远端服务器的,前边加一个感叹号!就是操作的本地服务器。

删除远程服务器文件

sftp> ls

1.txt 2.txt Packages my.tar.gz my.zip rh test test.java

sftp> rm 1.txt

Removing /opt/1.txt

删除本地服务器文件

sftp> !rm test.txt

在远程服务器创建目录

sftp> mkdir /opt/mytest

sftp> ls

2.txt Packages my.tar.gz my.zip mytest rh test test.java

在本地创建目录

sftp> !mkdir /mytest

sftp> !ls /

bin dev home lib64 mnt opt root sbin sys usr

boot etc lib media mytest proc run srv tmp var

上传文件到远程服务器工作目录

sftp> put yum.log

Uploading yum.log to /opt/yum.log

yum.log 100% 0 0.0KB/s 00:00

sftp> ls

2.txt Packages my.tar.gz my.zip mytest rh test test.java yum.log

从远程服务器下载文件到本地工作目录

sftp> get my.tar.gz

Fetching /opt/my.tar.gz to my.tar.gz

/opt/my.tar.gz 100% 361 7.1KB/s 00:00

sftp> !ls

1.txt

2.txt

anaconda.log

firefox_root

hsperfdata_root

ifcfg.log

ks-script-r_cdEf

mozilla_root0

my.tar.gz

从远程服务器退出

sftp> bye

(2)wget

用来从指定的URL下载文件。wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕,所以支持断点续传。

格式:wget+选项+参数

centos7默认已经安装了wget命令,如果没有该命令的话,可以通过一下方式安装。

[root@node-1 ~]# yum install -y wget

查看帮助手册

[root@node-1 ~]# wget --help

示例

下载文件到当前目录

[root@node-1 ~]# wget http://mirrors.163.com/.help/CentOS7-Base-163.repo

下载支持断点续传,并将下载的文件重命名

[root@node-1 ~]# wget -c -O 163.repo
http://mirrors.163.com/.help/CentOS7-Base-163.repo

15、软件安装卸载类命令

(1)软件离线安装rpm

RPM(RedHat Package
Manager),即Rethat软件包管理工具,类似windows里面的exe可执行文件,因Centos系统来自于Redhat,故Centos系统也可以使用这种软件包管理方式,它是Linux这系列操作系统里面的打包安装工具,它虽然是RedHat的标志,但理念是通用的。

RPM包的名称格式:

Apache-1.3.23-11.i386.rpm

-“apache” 软件名称

-“1.3.23-11”软件的版本号,主版本和此版本

-“i386”是软件所运行的硬件平台

-“rpm”文件扩展名,代表RPM包

缺点:需要自己解决软件包的依赖问题,要手动将某个软件依赖的软件安装。

格式:rpm+选项+参数
示例:

查询已安装rpm包

查询所有已安装rpm包

[root@node-1 ~]# rpm -qa

查询是否已经安装火狐

[root@node-1 ~]# rpm -qa|grep firefox

firefox-52.7.0-1.el7.centos.x86_64

卸载rpm包

格式:rpm -e rpm软件包

格式:rpm -e --nodeps
rpm软件包,如果要卸载的某个rpm包被其它rpm包依赖,可以通过加–nodeps参数强制卸载。

卸载火狐安装包:

[root@node-1 ~]# rpm -e firefox-52.7.0-1.el7.centos.x86_64

安装rpm包

格式:rpm -ivh 软件包文件

选项解读:

-i=install,安装

-v=verbose,显示详细信息

-h=hash,进度条

安装firefox软件

先将firefox上传到root家目录

执行安装

[root@node-1 ~]# rpm -ivh firefox-52.7.0-1.el7.centos.x86_64.rpm

准备中… #################################
[100%]

正在升级/安装…

1:firefox-52.7.0-1.el7.centos
################################# [100%]

(2)软件在线安装yum

YUM(全称为 Yellow dog Updater,
Modified),是在Fedora和RedHat以及SUSE中基于rpm的软件包管理器,它可以使系统管理人员交互和自动化地更细与管理RPM软件包,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。

格式:yum+选项+参数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PGFGYJEH-1639988203280)(media/8e50461ff89827d1c772b1ce0a095e29.png)]

选项说明:

-y:对所有提问都回答“yes”

参数说明:

install:安装rpm软件包

update:更新rpm软件包

check-update:检查是否有可用的更新rpm软件包

remove:删除指定的rpm软件包

list:显示yum仓库的软件包信息

clean:清理yum过期的缓存

deplist:显示yum软件包的所有依赖关系

search : 查找软件包命令

清理所有缓冲数据

[root@node-1 ~]# yum clean all

删除火狐浏览器

[root@node-1 ~]# yum remove firefox

安装火狐浏览器

[root@node-1 ~]# yum install firefox

安装tree命令

[root@node-1 ~]# yum -y install tree

A.关联网络yum源

默认的系统YUM源,需要连接国外apache网站,网速比较慢,可以修改关联的网络YUM源为国内镜像的网站,比如网易163。

1.前期文件准备

(1)前提条件linux系统必须可以联网

(2)在Linux环境中访问该网络地址:http://mirrors.163.com/.help/centos.html,在使用说明中点击CentOS7->再点击保存,如下所示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ja13E69g-1639988203281)(media/9ba4a279b395a0b28eea5c01f932f062.png)]

(3)查看文件保存的位置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rd9kNBUH-1639988203281)(media/811224a04a27e06eb5eb4db6e03ce37e.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hjC59yNX-1639988203281)(media/ad14907a89a776a98bdcf992be9b0429.png)]

在打开的终端中输入如下命令,就可以找到文件的保存位置。

[root@node-1 下载]# pwd

/root/下载

2.替换本地yum文件

(1)把下载的文件移动到/etc/yum.repos.d/目录

[root@node-1 下载]# mv CentOS7-Base-163.repo /etc/yum.repos.d/

(2)进入到/etc/yum.repos.d/目录

[root@node-1 下载]# cd /etc/yum.repos.d/

[root@node-1 yum.repos.d]# pwd

/etc/yum.repos.d

  1. 把CentOS-Base.repo文件备份

    [root@node-1 yum.repos.d]# cp CentOS-Base.repo CentOS-Base.repo_bak

(3)用CentOS7-Base-163.repo替换CentOS-Base.repo

[root@node-1 yum.repos.d]# mv CentOS7-Base-163.repo CentOS-Base.repo

mv:是否覆盖"CentOS-Base.repo"? y

3.安装命令

(1)[root@node-1 yum.repos.d]#yum clean all

(2)[root@node-1 yum.repos.d]#yum makecache

yum makecache就是把服务器的包信息下载到本地电脑缓存起来

4.测试

[root@node-1 yum.repos.d]#yum list | grep firefox

[root@node-1 yum.repos.d]#yum -y install firefox.x86_64

B.制作只有本机能够访问的yum源

制作只有本机能访问的本地YUM源

(1)准备一台Linux服务器,版本CentOS-7.5-x86_64-DVD-1804.iso

(2)配置好这台服务器的IP地址

(3)将CentOS-7.5-x86_64-DVD-1804.iso镜像挂载到/mnt/mycdrom目录

[root@node-1 ~]# mkdir /mnt/mycdrom

[root@node-1 ~]# ls /mnt/mycdrom/

[root@node-1 ~]# mount -t iso9660 /dev/cdrom /mnt/mycdrom

mount: /dev/sr0 写保护,将以只读方式挂载

[root@node-1 ~]# ls /mnt/mycdrom/

CentOS_BuildTag EULA images LiveOS repodata RPM-GPG-KEY-CentOS-Testing-7

EFI GPL isolinux Packages RPM-GPG-KEY-CentOS-7 TRANS.TBL

(4)将光盘中用到软件包拷贝到本地任一目录中(复制过程比较慢)

[root@node-1 ~]# cd /opt/

[root@node-1 opt]# mkdir Packages

[root@node-1 opt]# cp -r /mnt/mycdrom/Packages/* /opt/Packages/

(5)执行创建yum仓库命令:createrepo 路径,注意此过程有点慢,一两分钟。

[root@node-1 Packages]# pwd

/opt/Packages

[root@node-1 Packages]# createrepo ./

Spawning worker 0 with 497 pkgs

Spawning worker 1 with 497 pkgs

Spawning worker 2 with 497 pkgs

Spawning worker 3 with 496 pkgs

Spawning worker 4 with 496 pkgs

Spawning worker 5 with 496 pkgs

Spawning worker 6 with 496 pkgs

Spawning worker 7 with 496 pkgs

Workers Finished

Saving Primary metadata

Saving file lists metadata

Saving other metadata

Generating sqlite DBs

Sqlite DBs complete

(6)修改本机上的YUM源配置文件,将源指向自己

备份原有的YUM源的配置文件:

[root@node-1 ~ ]# cd /etc/yum.repos.d/

[root@node-1 yum.repos.d]# cp CentOS-Base.repo CentOS-Base.repo.163bak

编辑CentOS-Base.repo文件,把原来内容清空,将如下内容注释部分删除后添加到该文件:

[root@node-1 yum.repos.d]# vi CentOS-Base.repo

[base]

name=CentOS-mylocal #自定义一个yum仓库名字

baseurl=file:///opt//Packages

gpgcheck=0

priority=2

enabled=1#增加改行,使启用

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

安装yum优先级工具:

yum install yum-priorities –y

(7)清除YUM缓存

[root@node-1 yum.repos.d]# yum clean all

已加载插件:fastestmirror, langpacks

正在清理软件源: base

Cleaning up everything

Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned
data from disabled or removed repos

Cleaning up list of fastest mirrors

(8)列出可用的YUM仓库

[root@node-1 yum.repos.d]# yum repolist

已加载插件:fastestmirror, langpacks

Determining fastest mirrors

base | 2.9 kB 00:00:00

base/primary_db | 3.1 MB 00:00:00

源标识 源名称 状态

base CentOS-mylocal 3,971

(9)测试安装相应的软件

安装之前,先卸载一下。

[root@node-1 yum.repos.d]# rpm -qa|grep tree

tree-1.6.0-10.el7.x86_64

[root@node-1 yum.repos.d]# yum remove tree-1.6.0-10.el7.x86_64

[root@node-1 yum.repos.d]# rpm -qa|grep tree

[root@node-1 yum.repos.d]# yum install -y tree

C.制作其他主机通过网络能访问的本地YUM源

上节制作的yum源只能在本机访问,其它机器不能访问,有时候我们会在局域网环境,在某台机器上搭建yum源,让其它机器也能够访问,加快下载速度。

我们在node-1机器上搭建能够允许其他机器访问的yum源,然后再准备一台node-2机器,做测试,让node-2使用node-1上搭建的yum源。

在node-1上搭建yum源

安装相应的软件

yum源就是一个供我们下载rpm包的站点,我们安装一个类似于tomcat的软件httpd供我们搭建站点。

[root@node-1 yum.repos.d]# yum install -y httpd

启动httpd服务

[root@node-1 yum.repos.d]# systemctl start httpd

使用物理机浏览器或者Linux的浏览器访问http://node-1:80/(如果访问不通,要关闭防火墙),如果看到一下页面,证明httpd启动成功。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jUgLh7jK-1639988203282)(media/7314c24e738d114ac67726fa2bf1ac71.png)]

配置rpm包到httpd的html目录

[root@node-1 yum.repos.d]# cd /var/www/html/

[root@node-1 html]# mkdir Packages

[root@node-1 html]# cp -r /opt/Packages/* /var/www/html/Packages/

执行创建仓库命令:createrepo 路径,注意此过程有点慢,一两分钟。

[root@node-1 html]# cd Packages/

[root@node-1 Packages]# pwd

/var/www/html/Packages

[root@node-1 Packages]# createrepo ./

配置其它机器并测试

准备另一台机器node-2,修改其yum源,将其yum源指向node-1

[root@node-2 ~]# cd /etc/yum.repos.d/

[root@node-2 yum.repos.d]# cp CentOS-Base.repo CentOS-Base.repo.bak

编辑CentOS-Base.repo文件:

[root@node-2 yum.repos.d]# vi CentOS-Base.repo

把原来内容清空,添加如下内容:

[base] name=node-1 baseurl=http://node-1/Packages gpgcheck=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

在这台新的服务器上执行YUM的命令

[root@node-2 yum.repos.d]# yum clean all

已加载插件:fastestmirror, langpacks

正在清理软件源: base

Cleaning up everything

Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned
data from disabled or removed repos

Cleaning up list of fastest mirrors

[root@node-2 yum.repos.d]# yum repolist

已加载插件:fastestmirror, langpacks

Determining fastest mirrors

base | 2.9 kB 00:00:00

base/primary_db | 3.1 MB 00:00:00

源标识 源名称 状态

base node-1 3,971

repolist: 3,971

16、虚拟机克隆
  1. 快速搭建一台相同配置的centos

    有时候,我们需要用到多个虚拟机。重新安装会花费大量的时间,此时,可以通过vmware虚拟机自带的功能快速克隆出完全相同的系统,节约时间。

前提:被克隆的虚拟机系统要处于关闭状态。

  1. 克隆类型

克隆分为链接克隆和完整克隆。

链接克隆:是对原始虚拟机的引用,所需的存储磁盘空间较少。但是,必须能够访问原始虚拟机才能运行。

完整克隆:是原始虚拟机当前状态的完整副本。此副本虚拟机完全独立,但需要较多的存储磁盘空间。

我们选择完整克隆。

  1. 克隆步骤

我们以node-1为模板,先将其关机。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WHmiWRBA-1639988203283)(media/7d31c335ba5424071559f055c9a29fd1.png)]

选择克隆

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0BvTR3oa-1639988203283)(media/7a3a2a7dd44606bd207930cb8545e167.png)]

选择下一步

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VGsvy8nW-1639988203283)(media/5c7ab257867c15b9a4d707390234572b.png)]

选择克隆虚拟机的当前状态,并下一步

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-86iS5jKd-1639988203284)(media/7add6e083afb0f083b6d07d2aed55027.png)]

选择完整克隆并下一步
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UPdBnjQT-1639988203284)(media/627ea45ac43c98c917bbb1c5ebc7a41a.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jYsI4eSO-1639988203285)(media/627ea45ac43c98c917bbb1c5ebc7a41a.png)]

选择一个目录,并给新机器命名

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ebygbRMC-1639988203285)(media/8fb62ce7a0c05add9cc74001a60a1250.png)]

开始克隆,这个过程根据自己的电脑性能,要耗费几分钟的时间,这期间尽量不要做其它操作,等待着它的完成。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ocgpDbkr-1639988203286)(media/c7152e574b0982bbbae5658364c4174a.png)]

克隆完成,点击关闭

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L8HDtzLG-1639988203286)(media/c33760662eab881001ea08e1ac867484.png)]

  1. 克隆后配置

克隆完成后,将克隆后的虚拟机开机,做一些配置。

修改主机名

在虚拟机界面打开终端,修改主机名为node-2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EnC61bYm-1639988203287)(media/01755bae994a544bf68ea8ff4913ddda.png)]

关闭终端,重新打开一个终端,就能看到主机名已经修改完毕

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oDjXSFsP-1639988203287)(media/4826849a5934484a74aefadc703c101d.png)]

修改ip地址,重新指定一个新的ip地址

[root@node-2 ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33

TYPE=“Ethernet”

PROXY_METHOD=“none”

BROWSER_ONLY=“no”

BOOTPROTO=“static”

DEFROUTE=“yes”

IPV4_FAILURE_FATAL=“no”

IPV6INIT=“yes”

IPV6_AUTOCONF=“yes”

IPV6_DEFROUTE=“yes”

IPV6_FAILURE_FATAL=“no”

IPV6_ADDR_GEN_MODE=“stable-privacy”

NAME=“ens33”

UUID=“8125b2f3-1e37-4b5d-8027-0e9776c61af3”

DEVICE=“ens33”

ONBOOT=“yes”

IPADDR=192.168.168.112

GATEWAY=192.168.168.2

DNS1=192.168.168.2

重启网络服务

[root@node-2 ~]# systemctl restart network

这些都修改完毕后,新的虚拟机就克隆完毕了,能够使用xshell远程登录了。

  1. ssh安全外壳协议

SSH为Secure
Shell(安全外壳协议)的缩写,简单说,SSH只是一种网络协议,用于计算机之间的加密登录。很多通信方式,比如ftp、telnet在本质上都是不安全的,因为它们在网络上角明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。通过使用SSH,你可以把所有传输的数据进行加密,别人即使截获了这些数据,也没法解密了。

SSH是由客户端和服务端的软件组成的,

服务端是一个守护进程(sshd),他在后台运行并监听和响应来自客户端的连接请求。

客户端包含ssh程序以及像scp(远程拷贝)、sftp(安全文件传输)等其他的应用程序。

默认情况下,centos7已经安装了ssh的服务端和客户端,可以通过以下方式查看。

[root@node-1 ~]# yum list installed | grep openssh-server

openssh-server.x86_64 7.4p1-16.el7 @anaconda

查看服务端,有sshd进程监听22号端口,等待着客户端的连接,

[root@node-1 ~]# netstat -anp|grep 22

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1342/sshd

tcp 0 52 192.168.168.111:22 192.168.168.1:2354 ESTABLISHED 4379/sshd: root@pts

tcp 0 0 192.168.168.111:22 192.168.168.1:1465 ESTABLISHED 1875/sshd: root@pts

tcp6 0 0 :::22 ::😗 LISTEN 1342/sshd

查看客户端命令

[root@node-1 ~]# which ssh

/usr/bin/ssh

如果没有安装,可以通过以下方式安装

[root@node-1 ~]# yum install openssh-server

示例:

在node-1机器上,使用该机器安装的ssh客户端命令,采用node-2机器上的用户名root和密码登录node-2

[root@node-1 ~]# ssh root@node-2

The authenticity of host ‘node-2 (192.168.168.112)’ can’t be established.

ECDSA key fingerprint is SHA256:miQCJ2x5roY26B53LUO9/F4njpMjNiJgjX8mHJAzNDs.

ECDSA key fingerprint is MD5:93:a7:f9:d1:94:eb🇩🇪f0:3d:47:95:d2:6f:82:62:0d.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added ‘node-2,192.168.168.112’ (ECDSA) to the list of known
hosts.

root@node-2’s password:

Last login: Tue Feb 2 10:09:30 2021

[root@node-2 ~]#

从node-2机器上退回到node-1

[root@node-2 ~]# exit

登出

Connection to node-2 closed.

[root@node-1 ~]#

在node-1机器上,使用该机器安装的ssh客户端命令,采用node-2机器上的用户名offcn和密码登录node-2

[root@node-1 ~]# ssh offcn@node-2

offcn@node-2’s password:

Last login: Wed Jan 27 14:43:51 2021

[offcn@node-2 ~]$

(6)SSH免密登录配置

在上步我们登录到其他机器上都需要输入密码,这样非常麻烦。那么能不能提前把密码配置上,实现免密码登录呢?答案是可以的。

无密钥配置

  1. 免密登录原理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7Z0exhlD-1639988203288)(media/9af62a4443f5f13e075a8f99c703a0fa.png)]

  1. 生成公钥和私钥:(-t 指定密钥类型,默认是
    rsa,可省略不写,rsa是一种加密算法)

    [root@node-1 .ssh]$ pwd

    /root/.ssh

    [root@node-1 .ssh]$ ssh-keygen -t rsa

    然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)

  2. 将公钥拷贝到要免密登录的目标机器上

    [root@node-1.ssh]$ ssh-copy-id node-1

    [root@node-1.ssh]$ ssh-copy-id node-2

    [root@node-1.ssh]$ ssh-copy-id node-3

    .ssh文件夹下(~/.ssh)的文件功能解释

  3. known_hosts :记录ssh访问过计算机的公钥(public key)

  4. id_rsa :生成的私钥

  5. id_rsa.pub :生成的公钥

  6. authorized_keys :存放授权过的可以无密登录本服务器的其它机器的公钥
    be you want: rm -rf /var/cache/yum, to also free up space taken by orphaned
    data from disabled or removed repos

Cleaning up list of fastest mirrors

[root@node-2 yum.repos.d]# yum repolist

已加载插件:fastestmirror, langpacks

Determining fastest mirrors

base | 2.9 kB 00:00:00

base/primary_db | 3.1 MB 00:00:00

源标识 源名称 状态

base node-1 3,971

repolist: 3,971

16、虚拟机克隆
  1. 快速搭建一台相同配置的centos

    有时候,我们需要用到多个虚拟机。重新安装会花费大量的时间,此时,可以通过vmware虚拟机自带的功能快速克隆出完全相同的系统,节约时间。

前提:被克隆的虚拟机系统要处于关闭状态。

  1. 克隆类型

克隆分为链接克隆和完整克隆。

链接克隆:是对原始虚拟机的引用,所需的存储磁盘空间较少。但是,必须能够访问原始虚拟机才能运行。

完整克隆:是原始虚拟机当前状态的完整副本。此副本虚拟机完全独立,但需要较多的存储磁盘空间。

我们选择完整克隆。

  1. 克隆步骤

我们以node-1为模板,先将其关机。

[外链图片转存中…(img-WHmiWRBA-1639988203283)]

选择克隆

[外链图片转存中…(img-0BvTR3oa-1639988203283)]

选择下一步

[外链图片转存中…(img-VGsvy8nW-1639988203283)]

选择克隆虚拟机的当前状态,并下一步

[外链图片转存中…(img-86iS5jKd-1639988203284)]

选择完整克隆并下一步
[外链图片转存中…(img-UPdBnjQT-1639988203284)][外链图片转存中…(img-jYsI4eSO-1639988203285)]

选择一个目录,并给新机器命名

[外链图片转存中…(img-ebygbRMC-1639988203285)]

开始克隆,这个过程根据自己的电脑性能,要耗费几分钟的时间,这期间尽量不要做其它操作,等待着它的完成。

[外链图片转存中…(img-ocgpDbkr-1639988203286)]

克隆完成,点击关闭

[外链图片转存中…(img-L8HDtzLG-1639988203286)]

  1. 克隆后配置

克隆完成后,将克隆后的虚拟机开机,做一些配置。

修改主机名

在虚拟机界面打开终端,修改主机名为node-2

[外链图片转存中…(img-EnC61bYm-1639988203287)]

关闭终端,重新打开一个终端,就能看到主机名已经修改完毕

[外链图片转存中…(img-oDjXSFsP-1639988203287)]

修改ip地址,重新指定一个新的ip地址

[root@node-2 ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33

TYPE=“Ethernet”

PROXY_METHOD=“none”

BROWSER_ONLY=“no”

BOOTPROTO=“static”

DEFROUTE=“yes”

IPV4_FAILURE_FATAL=“no”

IPV6INIT=“yes”

IPV6_AUTOCONF=“yes”

IPV6_DEFROUTE=“yes”

IPV6_FAILURE_FATAL=“no”

IPV6_ADDR_GEN_MODE=“stable-privacy”

NAME=“ens33”

UUID=“8125b2f3-1e37-4b5d-8027-0e9776c61af3”

DEVICE=“ens33”

ONBOOT=“yes”

IPADDR=192.168.168.112

GATEWAY=192.168.168.2

DNS1=192.168.168.2

重启网络服务

[root@node-2 ~]# systemctl restart network

这些都修改完毕后,新的虚拟机就克隆完毕了,能够使用xshell远程登录了。

  1. ssh安全外壳协议

SSH为Secure
Shell(安全外壳协议)的缩写,简单说,SSH只是一种网络协议,用于计算机之间的加密登录。很多通信方式,比如ftp、telnet在本质上都是不安全的,因为它们在网络上角明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。通过使用SSH,你可以把所有传输的数据进行加密,别人即使截获了这些数据,也没法解密了。

SSH是由客户端和服务端的软件组成的,

服务端是一个守护进程(sshd),他在后台运行并监听和响应来自客户端的连接请求。

客户端包含ssh程序以及像scp(远程拷贝)、sftp(安全文件传输)等其他的应用程序。

默认情况下,centos7已经安装了ssh的服务端和客户端,可以通过以下方式查看。

[root@node-1 ~]# yum list installed | grep openssh-server

openssh-server.x86_64 7.4p1-16.el7 @anaconda

查看服务端,有sshd进程监听22号端口,等待着客户端的连接,

[root@node-1 ~]# netstat -anp|grep 22

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1342/sshd

tcp 0 52 192.168.168.111:22 192.168.168.1:2354 ESTABLISHED 4379/sshd: root@pts

tcp 0 0 192.168.168.111:22 192.168.168.1:1465 ESTABLISHED 1875/sshd: root@pts

tcp6 0 0 :::22 ::😗 LISTEN 1342/sshd

查看客户端命令

[root@node-1 ~]# which ssh

/usr/bin/ssh

如果没有安装,可以通过以下方式安装

[root@node-1 ~]# yum install openssh-server

示例:

在node-1机器上,使用该机器安装的ssh客户端命令,采用node-2机器上的用户名root和密码登录node-2

[root@node-1 ~]# ssh root@node-2

The authenticity of host ‘node-2 (192.168.168.112)’ can’t be established.

ECDSA key fingerprint is SHA256:miQCJ2x5roY26B53LUO9/F4njpMjNiJgjX8mHJAzNDs.

ECDSA key fingerprint is MD5:93:a7:f9:d1:94:eb🇩🇪f0:3d:47:95:d2:6f:82:62:0d.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added ‘node-2,192.168.168.112’ (ECDSA) to the list of known
hosts.

root@node-2’s password:

Last login: Tue Feb 2 10:09:30 2021

[root@node-2 ~]#

从node-2机器上退回到node-1

[root@node-2 ~]# exit

登出

Connection to node-2 closed.

[root@node-1 ~]#

在node-1机器上,使用该机器安装的ssh客户端命令,采用node-2机器上的用户名offcn和密码登录node-2

[root@node-1 ~]# ssh offcn@node-2

offcn@node-2’s password:

Last login: Wed Jan 27 14:43:51 2021

[offcn@node-2 ~]$

(6)SSH免密登录配置

在上步我们登录到其他机器上都需要输入密码,这样非常麻烦。那么能不能提前把密码配置上,实现免密码登录呢?答案是可以的。

无密钥配置

  1. 免密登录原理

[外链图片转存中…(img-7Z0exhlD-1639988203288)]

  1. 生成公钥和私钥:(-t 指定密钥类型,默认是
    rsa,可省略不写,rsa是一种加密算法)

    [root@node-1 .ssh]$ pwd

    /root/.ssh

    [root@node-1 .ssh]$ ssh-keygen -t rsa

    然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)

  2. 将公钥拷贝到要免密登录的目标机器上

    [root@node-1.ssh]$ ssh-copy-id node-1

    [root@node-1.ssh]$ ssh-copy-id node-2

    [root@node-1.ssh]$ ssh-copy-id node-3

    .ssh文件夹下(~/.ssh)的文件功能解释

  3. known_hosts :记录ssh访问过计算机的公钥(public key)

  4. id_rsa :生成的私钥

  5. id_rsa.pub :生成的公钥

  6. authorized_keys :存放授权过的可以无密登录本服务器的其它机器的公钥

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值