当前位置:   article > 正文

Linux学习笔记_保存文件后退出vi, 并统计文件的行数、字数、字节数。 3)重新编辑文件notes,加上

保存文件后退出vi, 并统计文件的行数、字数、字节数。 3)重新编辑文件notes,加上

前置知识

学习前的准备

首先安装一个虚拟机(VMware),在虚拟机上安装Linux的操作系统,我安装的是CentOS7,由于我是初学者,所以安装的带一个GNOM的图形界面。安装步骤也比较简单,网上都有教程,不详细说明了。

目录结构

从图形界面打开,可以看到Linux系统主要有如下目录。
在这里插入图片描述
在Linux系统中“一切皆文件”,我们借助图形界面可以显现如上的目录结构,但是在实际使用中,是没有图形界面的,就是只有控制台。在Linux中目录是以树形表示的,根目录是“/”,下面有子目录,子目录再有自己的子目录…
在这里插入图片描述
要大概记住Linux目录是这样一种形状。

目录详解
本节只介绍根目录下的一些子目录。

  • bin:存放常用的命令
  • sbin:存放一些权限比较高的命令,只有系统管理员才能使用的命令
  • home:用于存放普通用户目录,系统每添加一个用户,就会在home目录下新建一个子目录,每个子目录存放不同用户的数据。
  • root:系统管理员的用户目录
  • lib:系统开机所需要的动态链接共享库,类似windows系统中的dll文件,几乎所有的应用程序都需要使用这些共享库
  • lost+found:该目录是隐藏的,一般情况是空。当系统非法关机后,这个目录会放一些文件
  • etc:用来放配置文件,系统的配置文件,或我们自己安装的程序它们的配置文件会放在这里
  • usr:系统级的目录,系统和用户安装的程序和文件会放在这个目录
  • boot:存放Linux系统启动的核心文件,包括连接文件和镜像文件等
  • proc:该目录是一个虚拟目录,是系统内存的映射,不要轻易改动。
  • srv:service缩写,用来存放一些系统服务启动需要读取的数据文件,不要轻易改动。
  • sys:该目录下安装了一个文件系统,该目录也是系统目录,不要轻易改动。
  • temp:存放一些临时文件
  • dev:在linux中“一切皆文件”,包括硬件也会映射为一个文件来进行管理,而dev就是用来存放这些设备文件,类似window中的设备管理器
  • media:系统会自动识别一些设备,比如U盘、光驱等,然后把这些设备挂载到这个目录下
  • mnt:让用户临时挂载别的文件系统,我们可以将外部的存储挂载到这个目录,然后进入该目录就可以查看里面的内容的,后面讲的共享文件夹就会挂载到这个目录下
  • opt:用户级的目录,存放额外安装软件的地方,该目录安装的程序,它所有的数据、库文件等都放在同个目录下,当你不需要某个程序时直接删掉相应目录即可。也可以将软件的安装包放在这个目录。
  • /usr/local:软件安装后的目录,是usr的子目录。一般是通过编译源码方式手动安装的程序。
  • var:该目录存放不断扩充的东西,习惯将经常被修改的目录放在该目录下,包括各种日志文件
  • selinux:存放安全子系统,也就是系统的安全软件,它能控制程序只能访问特定的文件,有三种工作方式,可自行设置。因为我在安装时没有启用安全策略所以是看不到的。

设置共享文件夹

为了方便学习,设置一个共享文件夹,让window系统和linux系统之间共享一个文件夹。启用共享文件夹要先在linux中安装vmtools。

1首先在window系统中创建一个文件夹,文件夹中随便放一个文件
在这里插入图片描述
2打开虚拟机,右键创建的虚拟机
在这里插入图片描述
设置-》选项-》共享文件夹-》总是启用-》添加
在这里插入图片描述
将我们创建的文件夹添加进去,点击确定。

3启动linux,打开如下目录
mnt->hgfs,然后目录下就会有一个我们分享的文件夹,打开文件夹
在这里插入图片描述
在这里插入图片描述
共享文件夹设置完毕。我们也可以从linux系统中放文件在window中查看。

远程操作

在实际生产中,Linux服务器不是在本地电脑上,而是部署在公网上的服务器上,我们要使用,只能通过远程连接,包括文件上传和下载也都需要远程操作。

远程登录

要远程登录到Linux服务器上,需要远程登录的软件,推荐使用xshell,可以使用它的免费版本。
1安装xshell,不详细说了,网上都有步骤。

2打开查看linux系统IP地址:输入“ifconfig”命令
在这里插入图片描述
第三行192.168.242.131是IP地址

3在Windows操作系统ping一下,只有ping通才能远程连接。
在这里插入图片描述
4打开xshell软件,新建连接
在这里插入图片描述
协议为SSH;主机是要远程连接的Linux系统的IP地址;端口号不变。
在这里插入图片描述
新建会话后,点击连接,输入要登录的用户然后输入密码即可。

登录成功后,软件控制台会显示如下信息
在这里插入图片描述
然后就可以在xshell中输入命令控制远程的Linux系统了。使用“ls”命令会列出当前目录中的子目录和文件。
在这里插入图片描述

远程文件传输

1安装xftp软件,安装后打开显示如下界面
在这里插入图片描述
2和xshell基本类似,新建一个会话,然后连接,输入用户名和密码。
在这里插入图片描述
3成功连接后如下
在这里插入图片描述
左边是window系统,右边是远程连接的linux系统。可以借助图形界面的方式拖动上传和下载,也可右键点击文件上传。
4解决乱码
可以看到右边linux是乱码,可以点击会话属性(查看下面有个绿色小齿轮),将主机类型设为linux,编码设为uft8
在这里插入图片描述

基础命令篇

vi和vim入门

vi是Linux系统内置的一个文本编辑器。
vim具有程序编程能力,可以看做是vi的增强版。可以主动的以字体颜色判断语法的正确性,方便程序设计。代码补全、编译及错误跳转等方便编程的功能丰富。

vi和vim的用法很相似,本节只讲述vim。vi和vim操作基本一致,vim中的快捷键在vi中也适用,会使用vim也基本会使用vi。

三种工作模式

正常模式
使用vim打开一个文档就会直接进入这个模式,这是一个默认模式。在这个模式中,你可以使用[上、下、左、右]按键来控制光标移动,也可以对文档进行删除、查找、复制、粘贴操作。
插入模式
在正常模式中按下“i,I,o,O,a,A,r,R”等按键后就会进入插入模式,也就是编辑模式,这个模式可以往文档中写入文字。
命令模式
在正常模式中按下“:”即可进入命令模式,这个模式可以输入命令来对文档进行如下操作:保存、退出、显示行号等操作。
模式之间的转换
这三种模式之间转换关系如下所示:
在这里插入图片描述

  • 按ESC可以从别的模式返回正常模式。
  • 按i可以从正常模式进入插入模式。
  • 按“:”可以从正常模式进入命令模式

常用快捷键

打开文档

vim 文件名
  • 1

使用该命令可以打开指定的文件,如果文件不存在,则会创建并打开。
快捷键
如下快捷键都是在正常模式使用。

  • yy:复制当前行,前面可以加数字,表示复制当前行向下的几行。例如5yy,表示复制包括当前行向下5行
  • p:粘贴,可以将复制的内容粘贴
  • dd:删除当前行,5dd表示删除包括当前行向下的5行
  • x:删除当前字符,5x表示删除包括当前字符向后5个字符
  • u:撤销上一次操作
  • /+关键字:按回车会在文件中根据关键字查找,按“n”就是查找下一个
  • :+set nu:进入到命令模式,让文件显示行号
  • :+set nonu:不显示行号
  • G:定位到文档的最末行
  • gg:定位到文档的首行
  • 按下一个数字后按shift+g,会定位到数字表示的行。
  • i:进入插入模式,在光标前插入字符
  • a:进入插入模式,在光标后写入字符

关机&重启

shutdown
该命令可以控制系统关机、重启。

 shutdown -h now      	立即关机
 shutdown -h 2 			两分钟后关机
 shutdown -r now			立即重启
  • 1
  • 2
  • 3

halt
类似shutdown -h now
reboot
类似shutdown -r now
sync
把内存的数据同步到磁盘。
不管是重启还是关机,首先要运行sync命令,把内存数据写到磁盘中。
目前shutdown、reboot、halt命令都已经在关机前进行了sync。

用户登录&注销&切换

logout
退出登录,不过这个命令在图形运行级别无效,在运行级别3下有效,后面会说运行级别。
exit
退出,和logout很像
su
su命令可以切换用户

su - 用户名
  • 1

切换root用户登录

su - root
  • 1

用户管理

系统管理员才可以进行用户管理。
添加用户
useradd
该命令可以创建一个用户,格式如下:

useradd 用户名
  • 1

创建的新用户默认会在/home目录下有一个同名的家目录。
要想在创建时指定用户的家目录可以使用“-d”参数

useradd -d 指定目录 用户名
  • 1

修改用户密码
可以为新用户设置密码,也可以修改老用户的密码。格式如下

passwd 用户名
  • 1

注:如果不指定用户名会修改当前登录的用户。
删除用户

userdel 用户名
  • 1

使用上述命令会将指定的用户删除,但是会保留该用户的家目录,如果要将家目录一同删除可以使用以下命令:

userdel -r 用户名
  • 1

查看用户信息

id 用户名
  • 1

使用该命令可以查看到如下信息(uid、gid、组)
在这里插入图片描述
后面会说什么是用户组。

切换用户

su - 用户名
  • 1

注:从权限高的用户切换到权限低的用户不需要输入密码,反之需要,当需要返回原来用户时,可以使用exit/logout命令。

查看当前用户

who am I
  • 1

显示第一个登录系统的用户,并显示登陆时间

whoami
  • 1

显示当前用户

在这里插入图片描述

用户组管理

什么是用户组
用户组就是将用户进行分组,将拥有相似权限的用户分在一个组,方便系统管理,系统管理员才能管理用户组。

添加用户组

groupadd 组名
  • 1

删除用户组

groupdel 组名
  • 1

注:如果组中有用户则无法删

添加用户时加上组

useradd -g 用户组 用户名
  • 1

注:不指定组时,系统会默认创建一个和用户同名的组,并将它放进去。

修改用户的组
修改用户的用户组

usermod -g 用户组 用户名
  • 1

用户和组相关的配置文件

  • /etc/passwd 文件:记录系统中用户的各种信息,每一行就是一个用户的信息。每行含义(用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell)
  • /etc/shadow 文件:口令的配置文件。登录系统时来此配置文件验证口令。每行含义(登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志)
  • etc/group 文件:记录系统中的用户组信息,每一行就是一个用户组的信息。每行含义(组名:口令:组标识号:组内用户列表)

运行级别

linux的运行级别主要有如下几个:

  • 0:关机
  • 1:单用户
  • 2:多用户状态,没有网络服务
  • 3:多用户状态,有网络服务
  • 4:系统未使用,保留给用户
  • 5:图形界面
  • 6:系统重启

我们最常接触的运行级的3和5。3就是我们通过远程连接linux的状态,5就是在图形界面上使用linux。

切换运行级

init [1|2|3|4|5|6]
  • 1

打开带图形界面的Linux系统时处于运行级别5,使用如下命令可以切换到3(只有黑乎乎的窗口)

init 3
  • 1

再输入inti 5又可以切换回来了(图形界面)

默认运行级别
当我们的Linux系统有图形界面时,启动默认就会处于5级别,如何设计默认运行级别呢,往下看。

在centOS7以后,对运行级进行了简化,在/etc/inittab文件中有描述,在文件中只有两个最常用的选项,如下:

multi-user.target: 相当于运行级别3
graphical.target: 相当于运行级别5
  • 1
  • 2

使用如下命令可以获得当前系统的默认运行级别。

systemctl get-default
  • 1

在这里插入图片描述
我的是graphical.target,相当于5。

设置默认运行级可以使用“systemctl set-default”

systemctl set-default multi-user.target
  • 1

上面的命令将默认级别设置为3,下次启动系统时就会默认进入只有黑窗口的界面。

帮助指令

man命令

man 命令或配置文件
  • 1

man命令可以获取外部命令或配置文件的帮助信息,例如“获取ls命令的帮助信息”

man ls
  • 1

在这里插入图片描述
会获得ls命令的帮助信息,包括各种参数的介绍。
按空格翻下一页。
按q会退出帮助页面回到命令行。
help命令

help 命令名
  • 1

help命令只能获得shell内置命令的帮助信息,一般介绍比较简单。

获得cd命令的帮助信息。

help cd
  • 1

在这里插入图片描述

文件目录管理

显示目录或文件
(1)pwd 命令
使用pwd命令会打印当前工作目录的绝对路径(也就是你当前cd进了哪个目录)。
(2)ls 命令

ls [选项] [目录或文件]
  • 1

ls命令会将指定目录内的文件或目录打印出来,如果不指定目录默认就是当前工作目录。
一些选项:
-a:显示所有文件包括隐藏文件。
-l:以列表的方式显示信息(显示的信息比较全)
注:选项可以组合使用,比如“-al或-la”

切换目录

cd [参数]
  • 1

cd命令可以切换到指定目录。
一些参数:
~:表示家目录,“cd ~”会返回你的家目录
. ./:表示上一级目录,使用“cd . ./”会返回上一级目录
绝对路径或相对路径:表示进入指定目录。

绝对路径:从根目录“/”开始。如“cd /etc”会进入etc目录,无论刚刚处于哪个工作目录都会进入etc目录。
相对路径:从当前工作目录开始。比如当前处于/home目录,使用“cd …/”会回到根目录。

创建目录

mkdir [选项] 要创建的目录
  • 1

一些选项:

-p:创建多级目录
  • 1

(1)创建一层目录

mkdir aa
  • 1

会在当前工作目录创建一层目录aa
(2)创建多层目录

mkdir -p bb/cc
  • 1

会在当前工作目录下创建一个两层的目录(先创建一个bb,再在bb内创建一个cc)

注:既可以使用相对路径也可以使用绝对路径

删除目录

rmdir [选项] 要删除的空目录
  • 1

(1)如果要删除的目录是空目录,可以使用 rmdir直接删除。

rmdir 要删除的空目录
  • 1

(2)如果要删除的目录不是空目录可以使用如下rm命令删除

rm -rf 要删除的目录
  • 1

rm有如下常用参数:

-r:递归删除目录及目录中的内容
-f:每次删除前不提示,忽略不存在的文件
-i:每次删除前都提示
-d:删除空目录
  • 1
  • 2
  • 3
  • 4

注:rm默认不能删除目录,只有参数带-r或-R时才能删除目录。

创建文件

touch 文件名
  • 1

使用touchh命令可以创建一个空文件。

复制文件或目录
使用cp命令可以复制文件或目录到指定位置。

cp source dest
  • 1

常用选项:

-r 递归复制整个文件夹,如果要复制目录请加上该选项
  • 1

source 为文件或者目录;dest一般为目录。
注:如果source为文件而dest也为文件,则source的内容会覆盖dest。

移动文件或目录

mv source dest
  • 1

source 为文件或者目录;dest一般为目录。
注:如果source和dest都是文件,source会移动到dest并且覆盖dest的内容。

查看文件内容
(1)cat 命令

cat [选项] 要查看的文件
  • 1

常用选项

-n 显示行号
  • 1

使用cat命令会将文件中的所有内容显示到命令行。

(2)more 命令

more 要查看的文件
  • 1

常用选项如下

-NUM 指定一个数字NUM,用来指定每一屏显示的行数。
  • 1

more命令是一个基于vi编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。
可以使用如下快捷键

操作功能说明
空白键(space)向下翻一页
Enter向下翻一行
q退出
Ctrl+F向下滚动一屏
Ctrl+E返回上一屏
=输出当前行的行号
:f输出文件名和当前行的行号

(3)less 命令

less 要查看的文件
  • 1

less命令用来分屏查看文件内容,它的功能与more类似,但是比more命令更加强大,支持各种显示终端。
less命令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载的内容,对于现实大型文件具有较高的效率。
使用如下快捷键翻查文件内容

操作说明
空白键向下翻动一页
Pagedown向下反动一页
Pageup向上翻动一页
/字符串向下搜寻字符串;按n向下查找,N向上查找。
?字符串向上搜寻字符串;按n向下查找,N向上查找。
q退出

(4)head命令

head [选项] 文件
  • 1

查看文件的前几行,默认显示文件的前10行

常用选项

-n num   num指定一个数字,表示查看文件的前几行
  • 1

(5)tail命令

tail [选项] 文件
  • 1

查看文件的末尾几行,默认是10行

常用参数

-n num	指定一个数字num,表示查看文件的末尾num行
-f		实时追踪该文档的所有更新
  • 1
  • 2

(6) echo命令

echo [选项] [要输出内容]
  • 1

使用该命令不仅可以输出文字,也可以输出环境变量,比如输出环境变量PATH

echo $PATH
  • 1

(7)wc命令
计算文件的行数、字数和字节数

wc [选项] 文件
  • 1

文件可以有多个,每个文件对应输出一行,如果没有文件或文件为 “-” 时,从标准输入读取数据。
常用选项如下:

-l , --lines : 显示行数;
-w , --words : 显示字数;
-m , --chars : 显示字符数;
-c , --bytes : 显示字节数;
-L , --max-line-length : 显示最长行的长度;
  • 1
  • 2
  • 3
  • 4
  • 5

创建文件或目录的软连接
使用ln命令可以为文件或目录创建软连接,软连接类似window下的快捷方式

ln -s 原文件或目录 软连接名
  • 1

例如:为当前目录内的文件a.txt创建一个软连接到/home/b.txt

ln -s a.txt /home/b.txt
  • 1

查看历史指令
使用“history”命令可以查看最近使用过的命令

history [num]
  • 1

可以指定一个数字num,表示查看最近使用的num条指令。
在这里插入图片描述
左边的数字就是历史指令编号,如果要执行某条历史指令,可以使用如下格式:

!历史指令编号
  • 1

如“!5”表示执行编号为5的指令

时间和日期

(1)date 命令
date 命令可以显示或设置当前日期

显示日期

date [输出格式]
  • 1

不写输出格式会有一个默认的格式,如果想自定义输出格式可以使用如下符号:

%Y 	年
%m	月
%d	日
%H	小时(24)
%M 	分钟
%S	秒
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

例如:以"年-月-日 时:分:秒"格式输出日期

date "+%Y-%m-%d %H:%M:%S"
  • 1

注:中间有空格需要用双引号引起来

设置日期

date -s 字符串时间
  • 1

例如:
设置日期为2019年1月1日

date -s 20190101
  • 1

设置时间为13:00:59

date -s 13:00:59
  • 1

设置日期时间为2019年1月1日13:00:59

date -s "20190101 13:00:59"
  • 1

中间有空格需要用双引号引起来

输出重定向、追加、管道符号

(1)输出重定向符“>”
使用规则如下:

命令 > 文件
  • 1

使用“>”符号会将左边命令的结果输出到右边的文件中,这会导致右边文件的原内容被覆盖,如果不想将原内容覆盖可以使用追加符。

例如:将“hello word”写到a.txt文件中

echo hello word > a.txt
  • 1

(2)追加符">>"

命令 >> 文件
  • 1

将左边命令的结果追加到右边的文件中,这不会覆盖原文件的内容。

例如:将“你好”追加到a.txt文件末尾。

echo 你好 >> a.txt
  • 1

(3)管道符“|”

命令1 | 命令2
  • 1

将命令1的结果作为命令2的输入参数

例如:显示文件a.txt倒数第10、9行

tail a.txt | head -n 2
  • 1

搜索查找

(1)find 命令
find命令将从指定目录下递归地遍历各个子目录,找到满足条件的文件或者目录。

find [搜索范围] [选项] [动作]
  • 1

不指定搜索范围默认为当前目录。

一些常用选项

-name 	按照文件名查找
-iname 	按照文件名(忽略大小写)
-user 	按照属于指定用户查找
-group 	按用户组来查找
-nogroup 查找无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser 查无有效属主的文件,即文件的属主在/etc/passwd中不存(孤儿文件 没有所有者的文件)
-type 	按照文件类型查找,选项后可以跟如下值:
	b - 块设备文件。
	d - 目录。
	c - 字符设备文件。
	p - 管道文件。
	l - 符号链接文件。
	f - 普通文件。
	s -socket文件
-perm 	按权限来查找文件。
-empty 	查找长度为零(即空文件)的文件 r
-size [+/-]n 	按照文件大小查询文件,+n表示文件大小大于n,-n表示文件大小小于n。常用单位:k, M, G
-mtime [+/-]n 	按文件更改时间来查找文件,-n指n天以内,+n指n天以前,使用stat命令可以查看文件的时间信息
-atime [+/-]n 	按文件访问时间来查,-n指n天以内,+n指n天以前
-ctime [+/-]n 	按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-mmin、-amin、-cmin 这三个和mtime、atime、ctime用法一致,只不过单位是分钟
-newer file1 ! newer file2  查找更改时间比文件file1新但比文件file2旧的文件
注:选项前可以隔一个空格加上“!”表示否定,比如:“find ! -user chy”表示查找当前目录不属于chy的文件。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

一些常用动作

-print  默认动作,将匹配的文件输出到标准输出
-exec   对匹配的文件执行该参数所给出的命令。相应命令的形式为:command {} \;{}相当于占位符,注意{}\;之间的空格。
-ok     和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
-delete 将匹配到的文件删除
  • 1
  • 2
  • 3
  • 4

例如:查找/home目录下大于50M的文件并删除

find /home -size +50M -delete
  • 1

(2)locate命令
locate命令可以快速定位文件路径。locate命令利用事先建立的系统中所有文件名称及路径的locate数据库事先快速定位给定的文件。locate命令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新locate时刻。

locate 要搜索的文件名
  • 1

注:由于locate命令基于数据库进行查询,所以第一次运行前,必须使用updatedb命令创建locate数据库。
(3)which命令
which命令可以查看某个命令在哪个目录下。

which 命令名
  • 1

例如:查看ls命令在哪个目录

which ls
  • 1

(3)grep命令
grep 命令用于查找文件里符合条件的字符串。

grep [选项] 正则表达式 源文件
  • 1

一些常用的选项

-n 显示匹配行及行号
-i 忽略字母大小写
-v 反向匹配,只查找不含有指定内容的行
  • 1
  • 2
  • 3

统计文件行数和字数

wc命令
该命令常用于计算文件的行数、字数和字节数。

wc [选项] [文件]
  • 1

如果没有文件,默认会从标准输入读取数据。

一些常用的选项:

-l , --lines : 统计行数;
-w , --words : 统计字数;
-m , --chars : 统计字符数;
-c , --bytes : 统计字节数;
-L , --max-line-length : 统计最长行的长度;
  • 1
  • 2
  • 3
  • 4
  • 5

注:字数就是一整个单词算一个字数。字符数是一个字母算一个字符。

压缩和解压

zip和unzip

zip用于压缩文件,unzip用于解压文件。
(1)zip
zip可以压缩文件或目录

zip [选项] xxx.zip 要压缩的内容
  • 1

一些常用选项

-r 递归压缩,即压缩目录
  • 1

例如:将当前目录下的所有文件压缩成一个压缩文件ceshi.zip

zip -r ceshi.zip *
  • 1

*表示当前目录下所有文件和目录
(2)unzip

unzip [选项] 要解压的文件
  • 1

一些常用参数

-d 指定解压后文件的存放目录
  • 1

gzip和gunzip

gzip用于压缩文件,gunzip用于解压文件。
(1)gzip

gzip [选项] 要压缩的文件
  • 1

一些常用选项

-d 解开压缩文件
-r 递归处理,将指定目录下的所有文件及子目录一并处理(压缩目录下的每个文件)
-l 列出压缩文件的相关信息
-v 显示指令执行过程
  • 1
  • 2
  • 3
  • 4

注:

  • gzip 命令只能用来压缩文件,不能压缩目录,即便指定了目录,也只能压缩目录内的所有文件。
  • 压缩后会删除源文件。
  • 压缩后文件的后缀格式是 .gz。
  • 该命令还支持解压缩,使用-d选项。
  • 该命令不需要指定压缩包名。

(2)gunzip

gunzip [选项] 要解压的文件
  • 1
-r 递归处理,将指定目录下的所有文件及子目录一并处理(解压目录中的所有压缩文件)
-l 列出压缩文件的相关信息
-v 显示指令执行过程
  • 1
  • 2
  • 3

注:实际上 gzip -d 等价于 gunzip。所以无论是压缩还是解压缩都可以通过 gzip 命令来完成。解压缩后会删除掉原来的压缩包

tar

(1)打包
tar命令可以将多个文件或目录打包成一个.tar结尾的文件。

tar [选项] 要打包的内容
  • 1

一些常用选项

-c 创建新的.tar文件
-C 指定解包后的输出目录
-r 增加文件,将要打包的内容添加到某个.tar文件中去
-v 显示详细信息
-f 指定档案名字(tar包)
-x 解包.tar文件
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

例如:将/home/aa目录下的文件打包成a.tar文件

tar -cvf a.tar /home/aa/
  • 1

例如:将/home/bb目录下的文件添加到a.tar中

tar -rvf a.tar /home/bb/
  • 1

例如:将a.tar解包到当前目录

tar -xvf a.tar
  • 1

如果要解包到指定目录可以使用“-C”选项。
(2)打包并压缩
tar将文件打成包后还可以调用别的压缩程序将打包的文件压缩,主要有如下选项可供使用

-z 调用gzip命令,压缩或解压
  • 1

例如:将/home/aa文件夹下的内容打包并压缩成aa.tar.gz

tar -zcvf aa.tar.gz /home/aa
  • 1

例如:将aa.tar.gz解包并解压缩

tar -zxvf aa.tar.gz
  • 1

解压到了当前目录

注:调用gzip压缩后生成的文件一般以tar.gz结尾

权限管理

常用名词介绍

(1)所有者
一般为文件的创建者,谁创建了该文件,就是文件的所有者。

改变文件的所有者

chown 用户 文件名
  • 1

(2)所在组
当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组。

修改文件所在组

chgrp 组名 文件名
  • 1

(3)其他组
除文件的所有者和所在组的用户外,其他用户都是文件的其他组。

(4)常用修改命令

1.usermod 命令
修改用户的设置,常用选项如下

 -g 设置用户所在组
 -d 修改用户登录的初始目录
  • 1
  • 2

修改所在组格式

usermod -g 新组名  用户名
  • 1

修改初始登录目录格式如下

usermod -d 目录名 用户名
  • 1

2.chown 命令
修改文件所有者

chown 用户名 文件/目录
  • 1

修改文件所有者和所在组

chown 用户名:组名 文件/目录
  • 1

常用选项

-R 如果是目录,则使其下的所有子文件或目录递归生效
  • 1

权限的设置

(1)权限解析说明
使用ls -l命令,可以得到文件的详细信息,如下
在这里插入图片描述
首先看第一个,有这样的描述:“drwxr-xr-x”,解析如下:

  • 第0位确定文件的类型:d表示目录、-表示普通文件、c表示字符设备文件(鼠标、键盘)、b表示块设备(硬盘)
  • 第1-3位表示文件所有者的权限(r-可读、w-可写、x-可执行)
  • 第4-6位表示所在组用户的权限
  • 第7-9位表示其他组用户的权限

(2)rwx权限介绍
rwx作用到文件:

  • r代表可读,可以读取、查看
  • w代表可写,可以修改,但是不代表可以删除,删除一个文件的前提条件是对改文件所在的目录有写权限
  • x代表可执行,可以被执行

rwx作用到目录:

  • r代表可读,可以读取目录中的内容,可以ls查看目录内容
  • w代表可写,可以修改,在目录内可以创建、删除文件,也可以重命名目录
  • x代表可执行,即可以进入该目录

(3)chmod命令
使用chmod命令可以修改文件或目录的权限,主要有两种方式修改权限:

第一种:使用“+、-、=”变更权限

+ 增加权限
- 减少权限
= 先清除之前的权限,然后赋值为现在的权限
  • 1
  • 2
  • 3
u 所有者
g 所在组
o 其他用户
a 所有用户
  • 1
  • 2
  • 3
  • 4

格式如下:

chmod u=rwx,g=rx,o=x 文件/目录	所有者可以读、写、可执行,所在组用户可以读、可执行,其他用户只能执行
chmod g-x,o+r 文件/目录 			所在组用户在原有权限的基础上去除可执行的权限,其他用户增加读权限
chmod a-x 文件/目录				所有人都去除可执行的权限
  • 1
  • 2
  • 3

例如:给a.txt文件的所有者去除可执行权限,给所在组读、可执行权限,给其他组读权限。

chmod u-r,g=wx,o=w a.txt
  • 1

第二种:使用数字变更权限
使用三个数字来表示权限,第一位数字表示所有者的权限,第二位数字代表所在组用户的权限,第三位代表其他用户的权限。
每一个数字是一个三位的二进制数转换而来的,这三位二进制数第一位代表写权限,第二位代表读权限,第三位代表可执行权限,1为有权限,0为没有该权限。

7=111=rwx 读、写、可执行
4=100=r	  读
2=010=w   写
1=001=x   可执行
...
只要相应的位置上为1就表示拥有该权限
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

例如:修改a.txt的权限,所有者有读、写、可执行,所在组用户有读、写权限,其他用户有读权限。

chmod 764 a.txt
  • 1

sudo命令

sudo命令可以让普通用户暂时以root身份去执行命令而不用知道root用户的密码。
(1)root用户编辑配置文件“/etc/sudoers”
该配置文件只能由root用户编辑,在这个文件中,可以配置哪些用户可以使用哪些特定的命令。编辑该配置文件有两种方式:

  • 直接使用vim打开/etc/sudoers
  • 使用visudo命令

两种方式都可以打开配置文件,建议用第二种,因为第二种编辑好后会有语法检测功能,语法有问题是不能保存的。

进入配置文件后,找到如下几行:
在这里插入图片描述
其中第100行和第107行是比较核心的,第100行的格式是用来设置用户,107是用来设置用户组。

root ALL=(ALL) ALL
#用户名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)

%wheel ALL=(ALL) ALL
#%组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
  • 1
  • 2
  • 3
  • 4
  • 5

三个ALL的含义:

  1. 用户可以管理指定 IP 地址的服务器。这里如果写 ALL,则代表用户可以管理任何主机;如果写固定 IP,则代表用户可以管理指定的服务器。如果我们在这里写本机的 IP 地址,不代表只允许本机的用户使用指定命令,而是代表指定的用户可以从任何 IP 地址来管理当前服务器。
  2. 就是把来源用户切换成什么身份使用,(ALL)代表可以切换成任意身份。这个字段可以省略。
  3. 表示 root 把什么命令命令授权给用户,换句话说,可以用切换的身份执行什么命令。需要注意的是,此命令必须使用绝对路径写。默认值是 ALL,表示可以执行任何命令。

如果我们想要某个用户可以和root用户一样可以执行所有命令,只需要模仿第100行的格式,在第101行加上一条,将用户名改一下就行,如下:

chy ALL=(ALL) ALL
  • 1

如果只想指定某些命令给普通用户使用,可以用如下格式:

chy ALL=/usr/sbin/iotop
  • 1

注:如果有多个命令可以用逗号隔开。命令还可以更详细的指定带哪些参数,这样可以防止普通用户误操作。设置完成后保存即可

同样的,如果想设置某个组,和上面的格式也是一样的,只不过组名前要有%。

(2)root用户编辑好文件后,切换普通用户
普通用户可以使用如下命令查看自己可以sudo哪些命令

sudo -l
  • 1

执行命令会提示你输入你的密码。

要执行root用户赋予的特权命令采用如下格式

sudo 命令名
  • 1

定时任务

crond定时任务

crontab命令可以进行定时任务的设置,格式如下:

crontab [选项]
  • 1

常用选项如下

-e 编辑crontab定时任务
-l 查询crontab任务
-r 删除当前用户所有的crontab任务
  • 1
  • 2
  • 3

(1)使用crontab -e命令后进入编辑页面,设置定时任务格式如下

* * * * * 命令
  • 1

五个“*”占位符说明如下

第几个占位符含义范围
1一小时当中的第几分钟0-59
2一天当中的第几小时0-23
3一个月当中的第几天1-31
4一年当中的第几月1-12
5一周当中的星期几0-7(0和7都代表星期日)

一些特殊取值:

说明
*代表任何时间,比如第一个“*”就代表一小时中每分钟都执行一次的意思
,代表一不连续的时间,比如“0 8,12,16 * * * 命令” ,就代表每天的8点0分,12点0分和16点0分都执行一次命令
-代表连续的时间范围,比如“0 5 * * 1-6 命令”,代表在周一到周六的凌晨五点0分执行命令
*/n代表每隔多久执行一次,比如“*/10 * * * 命令” ,代表每隔10分钟就执行一遍命令

注意:每月的天数和星期几最好不要同时出现,因为他们定义的都是天。

(2)使用crontab -l可以查看你所创建的所有定时任务。
(3)使用crontab -r可以删除你所创建的定时任务(删除所有)
(4)要删除某一个任务,可以使用crontab -e进入编辑界面,将指定任务的那一行删除即可。

注:使用“service crond restart”命令可以重启任务调度。

at定时任务

crond会多次执行设置的任务,而at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,减产作业队列来运行。
默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。
at命令是一次性定时计划,执行完一个任务后不再执行此任务了。
在使用at命令时候,一定要保证atd进程的启动,可以使用相关命令来查看:“ps -ef | grep atd”

at命令格式如下:

at [选项] [时间]
Ctrl+D 结束at命令的输入
  • 1
  • 2

一些常用的选项

-m 当指定的任务被完成后,将给用户发送邮件,即使没有标准输出
-v 显示任务将被执行的时间
-c 打印任务的内容到标准输出
-V 显示版本信息
-q 使用指定的队列
-f 从指定文件读入任务而不是从标准输入读入
-t 以时间参数的形式提交要运行的任务
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

时间的格式,可以用以下几种方式指定时间:

 - hh:mm(小时:分钟),如果当天已经过去这个时间,会在第二天执行。
 - midnight(深夜)、noon(中午)、teatime(饮茶时间,一般是下午4点)等比较模糊的词指定时间
 - 12小时制,在时间后面加上AM(上午)或PM(下午),如11pm
 - 指定具体的日期,month day(月 日)或mm/dd/yy(月/日/年)或dd:mm:yy或dd.mm.yy(日.月.年),指定的日期必须跟在指定时间的后面,如:04:00 2022/12/08
 - 使用相对计时法。指定格式为now+count time-units。now就是当前时间;time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期);count是时间的数量,几天,几小时。如:now+5 minutes
 - 使用today(今天)、tomorrow(明天)来指定完成命令的时间
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

其他常用命令

atq:查看系统中没有执行的工作任务
atrm 任务编号:删除已经设置的任务
  • 1
  • 2

测试添加一个任务:
在这里插入图片描述

磁盘管理

磁盘的挂载与卸载

分区

  • Linux无论有几个分区,分给那一目录使用,它归根结底就只有一个根目录,一个独立且惟一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分
  • Linux采用了一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。

硬盘

  • Linux硬盘分IDE硬盘和SCSI硬盘,目前基本是SCSI硬盘。
  • IDE硬盘,驱动器标识符为“hdx~”,hd表明分区所在设备的类型,x为盘号(a:基本盘、b:基本从属盘,c:辅助主盘,d:辅助从属盘),~代表分区,前四个分区用数字1-4表示,从5开始就是逻辑分区。
  • SCSI硬盘标识符为“sdx~”,sd表示设备类型,其他和IDE硬盘表示法一样。

常用命令
(1)lsblk或lsblk -f
查看所有设备挂载情况

(2)fdisk——分区
对硬盘分区

fdisk 硬盘名称
  • 1

进入分区界面后的菜单选项

m 显示命令列表
p 显示磁盘分区,和fdisk -l一样
n 新增分区
d 删除分区
w 写入并退出
  • 1
  • 2
  • 3
  • 4
  • 5

说明:开始分区后输入n,新增分区,然后选择p,分区类型为主分区。两次回车默认剩余全部空间。最后输入w写入分区并退出,若不保存退出可以输入q

(3)mkfs——格式化分区
格式化分区

mkfs -t 分区类型 分区名称
  • 1

分区类型可以为“ext4”

(4)mount——将格式化后的分区挂载到目录
将一个分区与一个目录联系起来

mount 设备名称 挂载目录
  • 1

注:使用命令行挂载重启后会失效

(5)umount——将分区与目录断开
卸载分区

umount 设备名称/挂载目录
  • 1

(6)永久挂载
要实现永久挂载需要修改“/etc/fstab”文件。
修改文件后执行“mount -a”即可永久挂载。

演示
要成功添加一块硬盘需要如下步骤:
添加硬盘-> 为硬盘分区->给分区格式化 ->挂载

根据如上步骤使用虚拟机演示:
(1)为虚拟机新增加1G的硬盘。
在这里插入图片描述
(2)使用管理员登录系统
(3)使用lsblk -f命令查看系统中的所有硬盘
在这里插入图片描述

可以看到我们新增加的1G的硬盘“sdb”

(4)执行“fdisk /dev/sdb”为硬盘sdb分区
在这里插入图片描述
(5)执行lsblk -f命令查看所有硬盘
在这里插入图片描述
可以看到sdb硬盘分了一个sdb1的分区,但是这个分区还没有UUID,这是因为还没有格式化。

(5)使用mkfs命令,将刚分的分区格式化
在这里插入图片描述
(6)格式化后再查看就有UUID了
在这里插入图片描述
(7)使用mount命令,将sdb1挂载某个目录去
在这里插入图片描述
在查看可以看到sdb1的挂载点就是我们挂载的目录。

(8)永久挂载
使用“vim /etc/fstab”编辑文件。将我们的增加进去
在这里插入图片描述
然后使用“mount -a”命令,再次重启后也会继续挂载。

磁盘使用情况

(1)查询系统整体磁盘使用情况

df -h
  • 1

(2)查询指定目录/文件的磁盘占用情况

du [选项] 目录/文件
  • 1

常用选项

-s 指定目录占用大小汇总
-h 带计量单位
-a 文件和目录都包含
--max-depth=n 指定子目录深度n,和-s有冲突,只能使用一个
-c 列出明细的同时,增加汇总值
  • 1
  • 2
  • 3
  • 4
  • 5

网络管理

常用命令
(1)ifconfig命令
查看系统网卡的配置信息。
(2)ping命令
测试与指定主机是否连通

ping ip地址或域名
Ctrl+C取消ping
  • 1
  • 2

修改网络配置
直接修改配置文件“/etc/sysconfig/network-scripts/ifcfg-xxx”,这个“xxx”就是你的网卡名。
我的文件内容如下:

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="dhcp"
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="70d9095a-8988-493f-8308-40d0bd0b8daf"
DEVICE="ens33"
ONBOOT="yes"

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

文件解析

DEVICE 网卡名、接口名
HWADDR 物理地址、MAC地址
TYPE 网络类型,通常为Ethernet
UUID 随机Id
ONBOOT 系统启动的时候网络接口是否有效(yes/no)
BOOTPROTO IP配置的方法(none:不使用协议、static:静态分配IP、bootp:BOOTP协议、dhcp:自动分配IP、)
IPADDR IPV4地址
GATEWAY 网关
DNS1 域名解析器
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

通过在文件中将BOOTPROTO设置为static静态分配IP,然后添加IPADDR设置想要设置的IP地址。

设置完成后可以重启系统,或者输入如下命令重启网络服务

service network restart
  • 1

修改主机名
主机名就是当我们打开终端时,在@后面跟着的那个字符串。
在这里插入图片描述
(1)hostname 命令
通过hostname命令可以查看主机名。

(2)修改主机名
修改配置文件“/etc/hostname”。
修改后,重启生效。

hosts映射
这个映射是什么呢,就是让指定的主机名(随便一个字符串也行)绑定一个IP地址,这样我们ping的时候可以直接用主机名(字符串)代替那个IP地址。十分类似DNS域名解析的过程。

(1)设置映射
要想编辑主机名与IP地址的映射可以编辑配置文件“/etc/hosts”。
在文件末尾添加一行就行,格式如下:

IP地址	主机名
  • 1

(2)主机名解析分析
当我们在浏览器输入一个域名时,会经历如下步骤查找域名对应的IP地址:

浏览器缓存->dns解析器缓存->hosts文件->dns服务器

前两个又叫做本地缓存,一般来说,当电脑第一次成功访问某一网站后,在一定时间内,浏览器或操作系统会缓存它的IP地址。如果找不到会继续向下找。

进程管理

在Linux中,每个进程都有一个ID号(PID,进程号)。每个进程都可能以两种方式存在:前台和后台,在后台执行的进程我们通常是看不到的,它会在后台默默执行。一般系统的服务都是以后台进程的方式存在,而且都常驻在系统中,直到关机才结束。

查看系统中的进程

ps [选项]
  • 1

常用参数如下:

-a 显示当前终端的所有进程信息
-u 以用户的格式显示进程信息
-x 显示后台进程运行的参数
-e 显示所有进程
-f 显示进程的详细信息
  • 1
  • 2
  • 3
  • 4
  • 5

使用“ps -aux”可以得到很多进程的信息,如下图:
在这里插入图片描述
进程比较多,只截取了一部分,有几个主要参数介绍一下:

USER 用户名称
PID	进程的ID
%CPU 进程占用CPU的百分比
%MEM 进程占用物理内存的百分比
VSZ 进程占用虚拟内存大小(KB)
RSS 进程占用物理内存大小(KB)
TTY	终端机号
STAT 进程状态(S:睡眠、s:会话的先导进程、N:低优先级、R:正在运行、D:短期等待、Z:僵死进程、T:被跟踪或被停止)
START 进程的启动时间
TIME 此进程所消耗的CPU时间(总时间)
COMMAND	启动进程所用的命令和参数
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

父子进程
进程之间存在调用关系,被调用的称为子进程,调用方称为父进程。想要查看某个进程的父进程,使用如下命令会显示进程的父进程ID:

ps -ef
  • 1

结果如下:
在这里插入图片描述
其中PPID就是这个进程的父进程的ID。

终止进程
如果想要将某个进程停止,可以使用kill和killall命令。

(1)killall
通过进程名称杀死/终止进程

killall 进程名称
  • 1

注:通过进程名称杀死进程,也支持通配符,可以一下杀死多个进程。

(2)kill
通过进程id终止进程。

kill [选项] 进程号
  • 1

常用参数

-9 强迫进程立即停止,如果不带参数杀不掉的话,可以考虑带此参数
  • 1

查看进程树
进程树可以更直观的来看进程之间的关系。

pstree [选项] 
  • 1

常用选项

-p 显示进程的PID
-u 显示进程的所属用户
  • 1
  • 2

服务管理

服务的本质就是进程,但是是在后台的,通常都会监听某个端口,等待其他程序的请求,比如(mysql、防火墙等),因此我们又称其为守护进程。

service管理命令
使用service命令管理服务格式如下:

service 服务名 [start|stop|restart|reload|status]
  • 1
start 启动服务
stop 停止服务
restart 重启服务
reload 重新加载
status 查看服务状态
  • 1
  • 2
  • 3
  • 4
  • 5

service命令可以管理的服务都在“/etc/init.d”目录中。可以查看一下都有那些服务,如下:
在这里插入图片描述
如果我想要关闭network服务(上网功能),输入如下命令:

service network stop
  • 1

注:使用stop关闭服务,在系统重启后该服务还是会启动。centos7以后很多服务都使用systemctl命令管理,只有少数服务还在使用service命令管理。

设置开机自启动服务

setup
  • 1

使用setup命令可以设置哪些服务在开机时自动启动,哪些不启动。

输入setup后会进入如下界面(注意要有管理员权限才能使用)
在这里插入图片描述
选择System services可以看到系统的所有服务
在这里插入图片描述
带“*”号的会开机自启,不带的开机不会自启动,选择想要设置的服务,按空格键可以切换自启和不自启。设置完成后按TAB键可以选择菜单OK,再按一下是Cancel。

chkconfig命令
之前我们讲过运行级别,Linux系统一共有6个运行级别,我们最常用的是3和5,其中3是在开发中最常用的。
chkconfig命令可以设置服务的各个运行级别的开启与关闭。该命令可以管理的服务也都在“/etc/init.d”目录中。
该命令基本用法如下:

chkconfig --list 			列出服务在各个运行级别下的信息(开启或是关闭)
chkconfig 服务名 --list 		列出指定服务的信息
chkconfig --level n 服务名 on/off	设置指定服务在运行级别为n时是开启(on)还是关闭(off)
  • 1
  • 2
  • 3

查看服务在各个运行级别下的信息
在这里插入图片描述
可以看到只有两个,设置network在运行级别为5时为关闭。

chkconfig --level 5 network off
  • 1

注:chkconfig重新设置服务后需要重启才能生效。

systemctl命令
该命令可以管理的服务较多,其基本用法如下:

systemctl list-unit-files 列出所有服务的开机启动状态,可以使用grep命令过滤
systemctl [start|stop|restart|status|enable|disable|is-enabled] 服务名 对指定服务进行操作
	start	开启服务
	stop	停止服务
	restart	重启服务
	status	获得某个服务的状态
	enable	设置某个服务开机自启
	disable	关闭某个服务开机自启
	is-enabled 查询某个服务是否是自启动
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

注:使用telnet命令可以测试某个端口是否可以连通。

防火墙管理

防火墙是系统中的一个服务,在真正的生产环境,往往需要将防火墙打开,接下来讲防火墙的一些设置,包括打开指定端口和关闭指定端口等。

(1)打开指定端口

firewall-cmd --permanent --add-port=端口号/协议
  • 1

例如:打开3306端口
在这里插入图片描述
(2)关闭指定端口

firewall-cmd --permanent --remove-port=端口号/协议
  • 1

(3)重新载入
设置端口开启或关闭后,需要重新载入,才能生效

firewall-cmd --reload
  • 1

(4)查询某个端口是否开放

firewall-cmd --query-port=端口号/协议
  • 1

动态监控

动态监控可以随时查看系统中资源以及网络的使用情况。

监控进程

查看系统中进程使用资源的情况可以使用top命令,它和ps命令很相似,都用来显示正在执行的进程。top与ps最大的不同之处,在于top在执行一段时间可以更新正在运行的进程。

top [选项]
  • 1

一些常用选项

-d 秒数	指定top命令每隔几秒更新,默认是3秒
-i 不显示任何限制或僵死进程
-p 进程ID	通过指定某个进程ID来监控这个个进程的状态
  • 1
  • 2
  • 3

使用top命令后会进入如下界面
在这里插入图片描述
这个界面会根据指定的秒数动态刷新,并实时显示系统中资源的使用情况。

  • 1-5行是系统中资源的总体使用情况
  • 7行往下是某个进程所占用的资源。

进入该页面后,可以进行交互操作,比如按指定规则排序显示,退出等。

P	以CPU使用率排序,默认就是此项
M	以内存的使用率排序
N	以PID排序
q	退出top命令
k	终止指定的进程(输入K,然后回车,会提示你输入要结束进程的ID)
  • 1
  • 2
  • 3
  • 4
  • 5

监控IO

iotop命令可以监控系统中用户的IO操作。

iotop
  • 1

注:该命令默认是没有安装的,需要先安装一下

yum install iotop
  • 1

监控网络

使用netstat命令可以查看系统网络的情况。

netstat [选项]
  • 1

常用选项

-an 按一定顺序排列输出
-p 显示哪个进程在调用
  • 1
  • 2

只查看端口的占用情况

netstat -tunlp
  • 1

软件管理

rpm

rpm用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.rpm扩展名的文件。RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,类似windows的setup.exe,这一文件格式虽然打上了RedHat的标志,但理念是通用的。

(1)查询rpm包

rpm -qa 查看当前系统所有已安装的rpm包
  • 1

查询出的rpm包格式如下
在这里插入图片描述
包含软件包名称、版本号、适用操作系统。如果是x86_64表示是64位系统,如果是i686或i386表示32位系统,noarch表示通用。

除了查询所有软件包,还有如下常用命令

rpm -q 软件包名		查询软件包是否安装
rpm -qi 软件包名		查询软件包的详细信息
rpm -ql 软件包名		查询软件包中都有哪些文件,安装到了哪些目录
rpm -qf 文件全路径名	查询该文件属于哪个软件包
  • 1
  • 2
  • 3
  • 4

(2)卸载rpm包

rpm -e 软件包名
  • 1

注:如果我们要卸载某个软件包,可能会出现错误,比如说某个程序依赖它,所以不能删除,如果我们就是要强制删除,可以增加参数“- - nodeps”,这样就可以强制删除,但是一般不推荐这样做,因为依赖该软件包的程序可能无法运行。

(3)安装rpm包

rpm -ivh rpm包全路径名称
  • 1

参数说明

-i 安装
-v 提示
-h 显示进度条
  • 1
  • 2
  • 3

yum

yum是一个shell前端软件包管理器。基于rpm包管理,能够从指定的服务器自动下载rpm包并且安装,可以自动处理依赖性关系,并且一次性安装所有依赖的软件包。

常用命令如下:

yum list 列出所有可下载安装的软件包,可以使用grep过滤出想要的结果
yum install 软件包名 下载指定的软件包并安装
  • 1
  • 2

wget

wget是一个下载文件的工具,它用在命令行下。wget支持HTTP,HTTPS和FTP协议。

wget [参数] [URL地址]
  • 1

常用参数

-P(大写) 指定下载后保存的目录,如果不指定默认保存到当前目录
-O(大写) 指定要保存的文件名
  • 1
  • 2

例如:下载百度的首页html文件。
在这里插入图片描述

搭建JavaEE开发环境

(1)安装JDK

  1. 在windows中下载JDK的Linux版本
  2. 使用xftp从windows中将文件上传到Linux中的/opt目录下。
  3. 在/usr/local/中新建一个目录java
  4. 在Linux系统中将文件解压到/usr/local/java目录中
  5. 配置环境变。打开/etc/profile文件,最文件最后加上如下配置语句。
  6. 使用命令“source /etc/profile”让配置的环境生效。

Java环境变量配置如下:

#java配置环境变量
JAVA_HOME=/usr/local/java
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME CLASSPATH PATH
  • 1
  • 2
  • 3
  • 4
  • 5

JAVA_HOME的值为你的程序目录。

(2)安装Tomcat

  1. 下载安装文件,使用xftp上传文件到Linux
  2. 解压到某个目录
  3. 进入到解压目录/bin,使用“./startup.sh”启动tomcat(关闭使用./shutdown.sh)
  4. 浏览器访问linux系统8080端口看是否成功

(3)安装MySQL

shell编程

概述

学习Shell之前,我们要了解,Shell是什么。Shell是一个命令解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
简单来说,Shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell 的本质。
常用的Shell功能有两种形式外在形式:GUI和cmdline
(1)GUI(图形用户界面),特点是操作简单、易学易用,适合使用电脑来工作的人。
(2)cmdline(命令行界面),譬如linux的终端和windows的cmd,特点是不易用易学,优点是可以进行方便的shell编程,适合做开发的人。

脚本格式要求
(1)脚本要以如下语句开头

#!/bin/bash
  • 1

bash是我们常用的一个shell。

(2)脚本可以不需要用分号作为结尾,换行就代表一条语句的结束

执行脚本的方式
执行脚本常用有两种方式,如下:
(1)赋予脚本文件可执行(x)权限,然后“./脚本名”即可执行。
(2)不用赋予脚本文件可执行权限,可以使用sh命令执行脚本,如下:

sh 脚本名
  • 1

第一个程序
编写一个脚本,输出“Hello World!”。
(1)使用vim创建文件hello.sh文件,并写上如下内容:

#!/bin/bash
echo "Hello World!"
  • 1
  • 2

(2)保存并退出,执行如下命令执行该脚本

sh hello.sh
  • 1

(3)第二种执行脚本的方式,先赋予可执行权限,然后直接执行脚本,如下

chmod u+x hello.sh
./hello.sh
  • 1
  • 2

注:在脚本中我们也可以使用之前学习的命令。

注释

单行注释
单行注释使用“#”

#我是注释内容
  • 1

多行注释

<<!
我是注释内容
我是注释内容
!
  • 1
  • 2
  • 3
  • 4

注意:多行注释“<<!”和“!”要单独占一行

变量

Shell中的变量分为,系统变量和用户自定义变量。

系统变量

系统变量的值我们都定义在系统的环境变量中,常用的系统变量有PATH 、USER、HOME等,这些变量在系统启动时就存在于系统中,我们可以直接使用,使用格式如下:

$+变量名
  • 1

比如查看系统变量USER的值

echo $USER
  • 1

注:使用“set”命令可以查看系统中所有的环境变量。

自定义变量

shell脚本也支持在脚本内定义变量。
定义变量

变量名=
  • 1

注意:“=”号两边不能有空格。

撤销变量

unset 变量名
  • 1

撤销后的变量就不可以使用了。

声明静态变量

readonly 变量名
  • 1

注:静态变量不能被撤销(unset)

引用变量
要引用变量的值需要在变量名前加“$”号。

变量赋值

变量名=
  • 1

测试:

#!/bin/bash
v1=123
v2=nihao
v3=1.234
readonly v4=常数
unset v2
#输出变量
echo "v1=$v1,v2=$v2,v3=$v3,v4=$v4"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述

单引号、双引号、反引号的作用

单引号
单引号内的任何内容都会原样输出,所见即所得。如下:

#!/bin/bash
v1=abcd
echo '$v1'
  • 1
  • 2
  • 3

在这里插入图片描述
使用单引号后,并不会解析变量的值,而是直接将“$v1”原样输出了。

双引号
和单引号不同,双引号中会解析一些特殊字符,比如引用的变量“$”和转义字符。如下:

#!/bin/bash
v1=abcd
echo "v1=$v1"
  • 1
  • 2
  • 3

在这里插入图片描述
双引号会解析变量。

反引号
在反引号中的内容会被当做命令执行,并将结果返回。如下:

#!/bin/bash
v1=`date`
echo $v1
  • 1
  • 2
  • 3

在这里插入图片描述
在反引号中的date被当做命令执行,而不是一个字符串。
注:反引号可以在双引号内嵌套使用。

详解环境变量

(1)/etc/profile文件
之前在安装JDK时说到,环境变量保存在“/etc/profile”文件中,我们可以在该文件定义环境变量,使用“export”命令将其设置为环境变量,格式如下:

export 变量名
或
export 变量名=
  • 1
  • 2
  • 3

设置完环境变量后,还需要使用如下命令刷新该文件让变量生效。

source /etc/profile
  • 1

例如:定义一个环境变量TEST。
首先,打开/etc/profile文件,在文件末尾加上如下内容:

TEST=zaiciceshi
export TEST
  • 1
  • 2

保存并退出,使用如下命令刷新配置文件

source /etc/profile
  • 1

使用如下命令查看环境变量是否设置成功

echo $TEST
  • 1

在这里插入图片描述

(2)/etc/profile.d目录
如果在profile文件中写了太多配置,会让文件变得难以维护,所以profile.d目录就是来解决这个问题的。我们可以自定义一个shell脚本,在我们的脚本中设置环境变量,然后将脚本放到该目录下,刷新一下profile配置文件即可。原理就是profile文件会自动读取该目录下的脚本。

测试:
(1)进入/etc/profile.d目录,在目录内创建一个shell,名为test2.sh,在脚本内写上如下内容:

TEST2=ceshi2
export TEST2
  • 1
  • 2

(2)保存并退出文件,刷新配置文件profile。
(3)输出变量的值查看
在这里插入图片描述

位置参数变量

当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量,比如:“./myshell.sh 100 200”,这个就是一个执行shell的命令行,我们可以在脚本内获取到参数信息。

$n n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要使用大括号包含,如${10}
$* 这个代表命令行中所有的参数,$*会把所有参数当做一个整体
$@ 这个也代表命令行中的所有参数,但是会将每个参数区分对待,后面可以用于循环的
$# 代表命令行中所有参数的个数。
  • 1
  • 2
  • 3
  • 4

测试:
编写一个shell脚本,内容如下:

echo "参数如下:"
echo "$1 $2 $3"
echo "\$*=$*"
echo "\$@=$@"
echo "\$#=$#"
  • 1
  • 2
  • 3
  • 4
  • 5

运行结果如下:
在这里插入图片描述

预定义变量

预定义变量就是shell事先已经定义好的变量,可以直接在shelle脚本中使用。

$$ 当前进程的进程号PID
$! 后台运行的最后一个进程的进程号
$? 最后一次执行的命令的返回状态。如果为0,表明上一个命令正确执行;如果非0,表明上一个命令执行不正确。
  • 1
  • 2
  • 3

测试:
编写如下脚本:

echo "\$\$=$$"
echo "\$!=$!"
echo "\$?=$?"
  • 1
  • 2
  • 3

在这里插入图片描述

运算符

要运算算数表达式,有如下三种方式:

$((运算式))
$[运算式]
expr 运算式
  • 1
  • 2
  • 3

注:使用expr运算,运算符之间要有空格,如expr m + n不能expr m+n。expr中乘号要使用“\*”,不能直接使用*号。

测试:

v1=$((1+2-3*4/5))
v2=$[1+2-3*4/5]
v3=`expr 1 + 2 - 3 \* 4 / 5`
echo "$v1 $v2 $v3"
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
结果为1,看来不支持小数。

流程控制

判断语句

判断语句一般要结合其他流程控制语句使用。
格式:

[ 条件判断式 ]
  • 1

非空返回true,空返回false。
注意:条件判断式前后要有空格。

常用判断语句如下:

#比较字符串
= 比较两个字符串是否相等

#整数之间比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于

#判断文件权限
-r 是否有读权限
-w 是否有写权限
-x 是否有执行权限

#判断文件的类型
-f 文件是否存在并且是一个常规文件
-e 文件是否存在
-d 文件是否存在并且是一个目录

逻辑运算符
-a-o!
  • 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

单分支判断

if语句
语法格式

if [ 条件判断式 ]
then
我们写的代码
fi
  • 1
  • 2
  • 3
  • 4

例如:编写一个shell脚本if.sh,如果文件a.txt存在,则输出存在。

if [ -f a.txt ]
then
	echo "存在"
fi
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
先创建一个文件a.txt,然后执行脚本,打印“存在”。

多分支判断

if…elif…语句
语法格式如下:

if [ 条件判断式 ]
then
代码
elif [ 条件判断式 ]
then
代码
elif [ 条件判断式 ]
then
代码
...
fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

例如:编写一个脚本ifCase.sh,如果输入的参数大于等于60,则输出“及格了”,如果小于60,则输出“不及格”。

if [ $1 -ge 60 ]
then
        echo "及格了"
elif [ $1 -lt 60 ]
then
        echo "不及格"
fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

case语句
语法格式如下:

case $变量名 in
"值1")
代码1
;;
"值2")
代码1
;;
...
*)
代码n
;;
esac
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

注:如果变量都值都不匹配,则执行“*)”后的代码。

例如:编写一个脚本case.sh,当命令行参数是1时,输出“周一”,是2时,输出“周二”,其他情况输出“other”。

case $1 in
"1")
        echo "周一"
;;
"2")
        echo "周二"
;;
*)
        echo "other"
;;
esac
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这里插入图片描述

循环

for循环
语法格式如下:

语法格式1:
for 变量 in "值1 值2 值3 ..."
do
代码
done

语法格式2:
for ((初始值;循环控制条件;变量变化))
do
代码
done
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

格式2与很多高级编程语言的for循环很相似,有初始值、控制条件和变量变化。

测试1:打印命令行输入的所有参数(测试$*和$@的区别)

#!/bin/bash
echo '测试$*'
count=1
for i in "$*"
do
        echo "第$count个参数:$i"
        count=$[count+1]
done

echo '测试$@'
count=1
for j in "$@"
do
        echo "第$count个参数:$j"
        count=$[count+1]
done
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

在这里插入图片描述
可以看到虽然都可以将所有参数打印出来,但是“$*”将它们当做一个整体一下输出出来了,而“$@”则将每个单数区分开来。

测试2:从1加到100的值并输出到控制台。

#!/bin/bash
sum=0
for((i=1;i<=100;i++))
do
        sum=$[sum+i]
done
echo "$sum"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述
while循环

while [ 条件判断式 ]
do
代码
done
  • 1
  • 2
  • 3
  • 4

测试:从命令行输入一个数n,统计从1加到n的值是多少。

#!/bin/bash
i=1
sum=0
while [ $i -le $1 ]
do
        ((sum+=i))
        ((i++))
done
echo "$sum"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述
注:(( ))内支持类似C语言的算术表达式。

获取输入

使用read命令可以读取键盘输入的值。

read [选项] 参数
  • 1

常用选项:

-p 指定读取值时的提示符
-t 指定一个等待时间(秒),如果没有在指定时间内输入,就不等待了。
  • 1
  • 2

参数就是你的变量名。

测试:读取控制台输入的一个NUM值。

#!/bin/bash
read -p "请输入一个值:" num
echo $num
  • 1
  • 2
  • 3

在这里插入图片描述

函数

系统函数

主要介绍几个常用函数

函数名介绍
basename [string/pathname] [suffix]返回完整路径中最后/的部分,常用于获取文件名。如果指定suffix,则会将string/pathname中的suffix去掉
dirname 文件的绝对路径返回完整路径最后一个/之前的部分,常用于返回路径部分

测试:编写一个脚本测试basename和dirname

#!/bin/bash
path=/home/chy/test/a.txt
base=`basename $path`
echo $base
dir=`dirname $path`
echo $dir
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述

自定义函数

语法

定义:
[function] funtionName [()]
{
	代码;
	[return 返回值;]
}
注:“[ ] ”中的内容是可选的。

调用:
funtionName []
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

测试:定一个函数,功能是计算两个参数的和,getSum。

#!/bin/bash
function getSum ()
{
        a=$1
        b=$2
        result=$((a+b));
}
getSum 10 20
echo $result
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述
注:函数内使用$1和$2等,表示是传入函数的参数而不是传入脚本的参数。

正则表达式入门

正则表达式使用单个字符串来描述、匹配一系列符合某个语法规则的字符串。在很多文本编辑器里,正则表达式通常用来检索、替换那些符合某个模式的文本。在Linux中,grep,awk等文本处理工具都支持通过正则表达式进行模式匹配。

常规匹配

不包含特殊字符的正则表达式匹配它自己。例如:

cat /etc/passwd | grep chy
  • 1

这会匹配所有包含chy的行。

常用特殊字符

特殊字符说明
^匹配一行的开头。比如,“^chy”表示匹配以chy开头的行
$匹配一行的结尾。比如,“chy$”表示匹配以chy结尾的行。匹配开头和结尾也可以一起使用,表示匹配整行,比如,“^$”表示匹配空行 ,“^chy$”表示这一行只能是chy不能有别的。
.(点)表示匹配任意一个字符。比如,“r…t”表示匹配r和t中间有两个任意字符的行
**不能单独使用,它和上一个字符连用,表示匹配上一个字符0次或多次,例如,“ro*t”可以匹配rt、rot、root、rooot等等
[ ]表示一个区间,匹配某个范围内的一个字符,比如,“[a,c,d]”或“[acd]”都表示匹配a、c、d三个字符中出现任意一个都行。还有“[1-9]”表示匹配1-9这10个数字中任意一个
\表示转义,并不会单独使用。比如我们想使用一些字符,这些字符却有特殊意义,我们就可以用转义符,比如,"\$"表示匹配含有$的行

文本处理工具

文本处理工具可以帮我们处理一些文本数据,筛选出我们想要的数据。

cut命令

cut命令可以将每行按指定的分隔符分成几列,然后提取想要的列。

cut [选项] [文件]
  • 1

没有文件会默认从标准输入读取数据。

一些常用选项:

选项说明
-f指定一个列号,表示输出第几列的数据
-d指定一个分隔符,默认是制表符“\t”
-c按字符进行切割,后面加数字,表示取第几列,比如-c 1

测试:
在这里插入图片描述
将passwd文件每一行都用“:”号分割,然后输出第一列。

awk命令

awk是一个非常强大的文本分析工具,可以把文件逐行的读入,以空格作为默认分隔符将每行切片,切开的部分再进行分析处理。

awk [选项] '/pattern1/{action1} /pattern2/{action2}...' [文件]
说明:
	pattern:表示awk在数据中查找的内容,就是匹配模式,支持正则
	action:找到匹配内容时所执行的一系列命令,可以使用print命令,比如print $1表示输出第一列,同理,$2第二列...
  • 1
  • 2
  • 3
  • 4

常用选项

选项说明
-F指定输入文件分隔符
-v赋值一个用户定义变量

常用内置变量

变量名说明
FILENAME文件名
NR已读的记录数(行号)
NF浏览记录的域的个数(切割后,列的个数)

测试:
在这里插入图片描述
该条命令先将passwd文件以c开头的行找到,然后以“:”号进行分割,最后将分割后的第一列输出

shell实操

根据需求设计一个脚本

  1. 每天凌晨2:30备份数据库test到/data/backup/db
  2. 备份开始和备份结束能够给出响应的提示信息
  3. 备份后的文件要求以备份时间为文件名,并打包成".tar.gz"的形式,比如:2022-12-16_164059.tar.gz
  4. 在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除

(1)创建一个脚本backup.sh

#!/bin/bash
#备份目录
BACKUP=/data/backup/db
#获取当前时间
DATETIME=`data +%Y-%m-%d_%H%M%S`
#数据库地址
HOST=127.0.0.1
#数据库用户名
USERNAME=root
#数据库密码
PASSWORD=12345678
#要备份的数据库名
DATABASE=test

#检查备份目录,如果不存在,就创建
if [ ! -d "${BACKUP}/${DATETIME}" ]
then
	mkdir -p "${BACKUP}/${DATETIME}"
fi
#备份数据库
echo "开始备份..."
mysqldump -u${USERNAME} -p${PASSWORD} --HOST=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME}/$DATETIME.sql.gz
cd ${BACKUP}
tar -zcvf $DATETIME.tar.gz ${DATETIME}
rm -rf ${BACKUP}/${DATETIME}
echo "完成备份${BACKUP/${DATETIME}.tar.gz}"

#删除10天前的备份
find ${BACKUP} -ctime +10 -name "*.tar.gz" -exec rm -rf {} \;
  • 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
  • 29

(2)使用crond定时任务,定时执行该脚本。

进阶

日志管理

日志概述

日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等。
日志对于安全来说也很重要,它记录了系统每天发生的各种事情,通过日至来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。
可以这样理解,日志是用来记录重大事件的工具。

系统常用的日志
/var/log/目录是系统日志文件的保存位置。主要介绍几个常用的

文件说明
boot.log系统启动日志
cron记录与系统定时任务相关的日志
cups记录打印信息的日志
dmesg记录系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息
btmp记录错误登录的日志。这个文件是二进制文件,不能直接用vim查看,而要使用lastb命令查看
lastlog记录系统中所有用户最后一次登录时间的日志。这个文件也是二进制文件,要使用lastlog命令查看
mailog记录邮件信息
message记录系统重要信息的日志,这个日志文件会记录Linux系统的绝大多数重要信息。如果系统出现问题,首先要检查的应该就是这个日志文件
secure记录验证和授权方面的信息,只要涉及账户和密码的程序都会记录,比如系统的登录、ssh的登录、su切换用户、sudo授权,甚至添加用户和修改用户密码都会记录在这个文件中
wtmp永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机等事件。是二进制文件,要使用last命令查看
ulmp记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。这个文件不能用vim查看,而要使用w、who、users等命令查看

日志管理服务

CentOS7日志服务是“rsyslogd”。CentOS6的日志服务是“syslogd”。rsyslogd功能更强大,但是在使用上、日志文件的格式上和syslogd服务是兼容的。

查询Linux中rsyslogd服务是否启动

ps aux|grep rsyslog
  • 1

查询rsyslogd服务的自启动状态

systemctl list-unit-files|grep rsyslog
  • 1

配置文件
在配置文件/etc/rsyslog.conf中,记录着打印日志的规则,我们也可以在该配置文件中添加规则,自定义我们的日志规则。配置文件中每一行的格式如下:

*.*		存放的日志文件路径
  • 1

解析:其中第一个*代表日志类型,第二个*代表日志级别,然后最右边是存放日志信息的文件路径。

日志类型分为:
auth		pam产生的日志
authpriv	ssh、ftp等登陆信息的验证信息
corn		时间任务相关
kern		内核
lpr			打印
mail		邮件
mark(syslog)-rsyslog	服务内部的信息,时间标识
news		新闻组
user		用户程序产生的相关信息
uucp		unix to nuix copy主机之间相关的通信
local 1-7	自定义的日志设备
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
日志级别分为:
debug	有调试信息的,日志通信最多
info	一般信息日志,最常用
notice	最具有重要性的普通条件的信息
warning	警告级别
err		错误级别,阻止某个功能或者模块不能正常工作的信息
crit	严重级别,阻止整个系统或者整个软件不能正常工作的信息
alert	需要立即修改的信息
emerg	内核崩溃等重要信息
none	什么都不记录
从上到下,级别从低到高,记录信息越来越少。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

日志文件记录的格式
有日志服务rsyslogd记录的日志文件,日志文件的格式包含以下4列:

  1. 事件产生的时间
  2. 产生事件的服务器的主机名
  3. 产生事件的服务名或程序名
  4. 事件的具体信息

例如:查看/var/log/secure日志,信息格式如下:
在这里插入图片描述可以看到,大体有这么4列:时间、主机名、服务/程序名、信息。

日志轮替

日志轮替就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后,就会进行删除。

日志轮替介绍
centos7使用logrotate进行日志轮替管理,要想改变日志轮替文件名字,通过“/etc/logrotate.conf”配置文件中的“dateext”参数。
如果配置文件中有“dateext”参数,那么日志会用日期来作为日志文件的后缀,例如“secure-20221221”。这样日志文件名不会重叠,也就不需要日志文件的改名,只需要指定保存日志个数,删除多余的日志文件即可。
如果配置文件中没有“dateext”参数,日志文件就需要进行改名了。当第一次进行日志轮替时,当前的“secure”日志会自动改名为“secure.1”,然后新建“secure”日志,用来保存新的日志。当第二次进行日志轮替时,“secure.1”会自动改名为“secure.2”,当前的“secure”日志会自动改名为“secure.1”,然后也会新家“secure"日志,用来保存新的日志,以此类推。

/etc/logrotate.conf文件介绍
如下是一个系统的logrotate.conf文件
在这里插入图片描述
1-16行是通用设置。17行是将/etc/logrotate.d目录内的文件也都包含进来,20-34是某些日志的单独设置,单独设置优先级高于通用设置。

下面是一些可以用于该文件中的参数介绍

参数说明
daily日志轮替的周期是每天
weekly日志轮替的周期是每周
monthly日志轮替的周期是每月
rotate <num>保留日志文件的个数。0指没有备份
compress日志轮替时,旧的日志进行压缩
create <mode> <owner> <group>建立新日志,同时指定新日志的权限与所有者和所属组
mail <address>当日志轮替时,输出内容通过邮件发送到指定的邮件地址
missingok如果日志不存在,则忽略该日志的警告信息
notifempty如果日志为空文件,则不进行日志轮替
minsize <size>日志轮替的最小值。也就是日至一定要达到这个最小值才会轮替,否则就算时间达到也不轮替
dateext使用日期作为日志轮替文件的后缀
sharedscripts在此关键字之后的脚本只执行一次
prerotate / endscript在日志轮替之前执行脚本命令
postrotate / endscript在日志轮替之后执行脚本命令

自定义日志轮替
如果需要将自己的日志加入日志轮替,有如下两种方式:

  • 直接在/etc/logrotate.conf文件中写入该日志的轮替策略。
  • 第二种方式是在/etc/logrotate.d目录中新建立该日志的轮替文件,在该轮替文件中写入正确的轮替策略,因为该目录中的文件都会被“include”到主配置文件中,所以也可以把日志加入轮替。

自定义的日志轮替策略只需要模仿20-34行那两个日志的格式就行

日志全路径名
{
	日志轮替规则
}
  • 1
  • 2
  • 3
  • 4

日志轮替的原理
日志轮替之所以可以在指定的时间内备份日志,是依赖系统定时任务。在/etc/cron.daily目录中,有个logrotate文件(可执行),logrotate通过这个文件依赖定时任务执行。
在这里插入图片描述

内存日志

内存日志就是存放在内存中的日志,重启就会清空。如果需要查看内存日志,可以使用如下命令

#查看全部内存日志
journalctl
#查看最新的3条
journalctl -n 3
#查看指定时间范围内的日志(可以加日期)
journalctl --since 19:00 --until 19:10:103
#查看报错日志
journalctl -p err
#查看日志详细内容
journalctl -o verbose
#查看包含这些参数的日志(详细日志中查看)
journalctl _PID=1245 _COMM=sshd
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

定制自己的Linux

Linux的功能是很强大的,有时我们并不需要用到全部功能,甚至只用它的一些功能,基于此,我们就可以定制自己的小Linux。

Linux启动流程

  1. 自检,检查硬件设备是否有故障
  2. 如果有多块启动盘,需要在BIOS中选择启动盘
  3. 启动MBR中的bootloader引导程序
  4. 加载内核文件
  5. 执行所有进程的父进程、祖宗进程systemd
  6. 成功进入系统

内核文件的关键文件:
(1)Kernel文件:vmlinuz-3.10.0-957.el7.x86_64
(2)initrd文件:initramfs-3.10.0-957.el7.x86_64.img

定制思路

  1. 在原有的Linux系统上加一块硬盘,将硬盘分两个区,一个是/boot,另一个是/,并将其格式化,挂载到原有Linux系统上。
  2. 安装grub命令,将内核文件拷贝到新加的硬盘。拷贝原系统的/boot目录到新加硬盘的/boot目录
  3. 修改grub2/grub.cfg文件
  4. 复制原系统的一些常用命令到新硬盘中。例如这些目录下的命令:/lib64、/bin/bash
  5. 将这个新硬盘从原系统中解除挂载,重新挂载到另一台主机中就行了
  6. 如果指令不够用,可以再重新挂载到原系统拷贝想要的命令
  7. 拷贝完成后挂载回来重新启动系统

内核升级

(1)使用如下命令查看当前内核的版本

uname -a
  • 1

(2)使用如下命令检测内核版本,显示可以升级的内核(我们并不是想升级哪个版本都行,要看系统兼容哪些内核版本)

yum info kernel -q
  • 1

(3)使用如下命令升级内核

yum update kernel
  • 1

(4)查看已经安装的内核

yum list kernel -q
  • 1

备份和恢复

实体机无法做快照,如果系统出现异常或者数据损坏,后果严重,要重做系统,还会造成数据丢失,所以我们可以使用备份和恢复技术。
常用的备份有两种方式:

  • 使用tar打包(打包文件或分区)
  • 使用dump和restore命令

主要介绍一下使用命令的方式备份。

(1)如果没有这两个命令需要先安装

yum -y install dump
yum -y install restore
  • 1
  • 2

(2)dump介绍
dump支持分卷和增量备份

dump [-cu] [-1234567890] [-f 备份后文件名] [-T 日期] [目录或文件系统]
  • 1

参数介绍

参数说明
-c创建新的归档文件,并将由一个或多个文件参数所指定的内容写入归档文件的开头
-1234567890备份的层级。0为完全备份,会备份所有文件。若指定0以上的层级,则备份至上一次备份以来修改或新增的文件,到9后,可以再次轮替
-f指定备份后文件名
-j调用bzlib库压缩备份文件,也就是bz2格式,让文件更小
-T指定开始备份的时间与日期
-u备份完毕后,在/etc/dumpdares中记录备份的文件系统,层级,日期与时间等
-t指定文件名,若该文件已存在备份文件中,则列出名称
-W显示需要备份的文件及其最后一次备份的层级,时间,日期
-w和-W类似,但仅显示需要备份的文件

例如:备份/boot分区的所有内容到/opt/boot.bak.bz2文件,备份层级为0

dump -0uj -f /opt/boot.bak.bz2 /boot
  • 1

注:dump命令配合crontab定时任务可以实现无人值守备份

(3)restore介绍
restore命令用来恢复已备份的文件,可以从dump生成的备份文件中恢复原文件

restore [模式选项] [选项]
  • 1

模式选项有如下四个,只能从四个中选择一个,不能混用

模式选项说明
-C使用对比模式,将备份的文件与已存在的文件相互对比
-i使用交互模式,在进行还原操作时,restore命令将询问用户
-r进行还原模式
-t查看模式,查看备份文件有哪些文件

选项

选项说明
-f从指定的文件中读取备份数据,进行还原操作

例如:使用restore命令还原备份(如果你有增量备份,需要把增量备份也进行恢复,有几个增量备份文件就要恢复几个,按顺序来恢复即可)

restore -r -f /opt/boot.bak0.bz2//恢复到第一次完全备份状态
restore -r -f /opt/boot.bak1.bz2//恢复到第二次增量备份状态
  • 1
  • 2

可视化管理

webmin

webmin是功能青大的基于web的unix/linux系统管理工具。管理员通过浏览器访问webmin的各种管理功能并完成相应的管理操作。
(1)官网下载webmin的rpm包安装到Linux
webmin下载地址
(2)安装完成后,重置密码

/usr/libexec/webmin/changepass.pl /etc/webmin root <passwd>
  • 1

该命令可以重置webmin的root用户的密码
(3)修改端口号
默认webmin的端口号是10000,修改配置文件/etc/webmin/miniserv.conf可以修改端口号。
(4)重启webmin
(5)防火墙放行webmin端口
(6)配置完成后,就可以在window端通过浏览器以图形界面访问linux了

http://linux的IP地址:端口号/
  • 1

默认账号是root,密码前面(2)设置过了。

bt宝塔

bt宝塔Linux面板是提升运维效率的服务器管理软件,支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等多项服务器管理功能。

(1)直接在linux通过wget命令下载安装脚本并执行安装

wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
  • 1

(2)安装后控制台会显示登陆地址、账号、密码等信息,保存好
(3)通过浏览器访问登录地址输入账号密码即可进入管理界面
(4)如果忘记账号密码等信息了,在linux中使用如下命令可以重新查看

bt default
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/578357
推荐阅读
相关标签
  

闽ICP备14008679号