JAVA入门基础_Linux基础入门理解

目录

Linux操作系统

Linux操作系统的应用领域

  • 桌面应用领域(例如Ubuntu、Debian等)

  • 服务器领域是Linux系统最强的领域(免费、稳定、安全、对多并发的处理、高效等)

  • 嵌入式领域(可以根据需要对软件进行裁剪

VMware虚拟机的安装

在BIOS中开启操作系统的虚拟化

  • 一般笔记本电脑自动开启

  • 按照不同的计算机主板在开机时按指定按键进入BIOS

  • 找到Configuration或Security选项

  • 选择Virtualization或Intel Virtual Technology

  • 将其设置为Enable开启状态即可

虚拟机的实际安装

  • 进入虚拟机的官网下载一个虚拟机,这里使用的是15.5.1的版本,这边提供一个下载链接

  • 安装时注意修改一下安装位置即可,其他的一律下一步

  • 安装打开后
    image

Centos7.6版本的安装

下载Centos操作系统的镜像

下载Centos7.6版本,可以点击下载地址

使用VMware虚拟机软件创建一个虚拟机

  • 点击左上角的文件 -> 选择创建虚拟机
    image

  • 选择典型后点击下一步
    image

  • 选择稍后安装操作系统后点击下一步
    image

  • 将客户机操作系统选择为Linux,并将版本选择为Red Hat Enterprise Linux7 64位
    image

  • 可以修改虚拟机的名称、也可以更改虚拟机的安装位置(自行修改)
    image

  • 选择最大磁盘大小(如果不够了,后续是可以增加磁盘大小的),再选择将虚拟机拆分为多个文件(会随着系统文件大小而增加,不会一开始就占用全部的磁盘大小)
    image

  • 最后点击完成即可

正式安装Centos7.6

为已经创建好的虚拟机设置内存、处理器、镜像、网络适配器

  • 点击编辑虚拟机设置
    image

  • 修改虚拟机的内存,根据你的电脑实际配置修改
    image

  • 修改分配的处理器数量(可以通过查看任务管理器、找到资源监视器看到自己有多少个cpu,一个cpu有多少个内核),我这里相当于给了四分之一
    image
    image

  • 选择CD/DVD,选择使用IOS镜像文件,选择已经下载好的Centos7.6
    image

  • 网络适配器一般选择NAT模式
    image

安装信息摘要(软件选择、配置分区、KDUMP、网络、安全策略)

选择Install Centos7

image

选择Centos的安装语言(我这里选择中文)

image

软件选择(GNOME桌面,为了学习方便,实际开发选择最小安装)
- 这样将会包含JDK、GCC、MYSQL等

image

安装位置(配置分区)
  • /boot 引导分区,设置exp4文件格式,大小一般为1G

  • /swap 交换分区,设置swap文件格式,大小一般为linux内存大小(所以这里我这里选2G)

    • 该分区的作用:当Linux的内存被占用满了时,有一个程序想要加载进内存运行,那么就会进入swap分区的内存来运行,当真正的内存有空间时,再放入Linux的真实内存。(相当于一个Linux内存不足的补充极致)
  • / 根分区,设置exp4文件格式,剩下的硬盘空间20-3全部给根分区

操作步骤如下:

1. 点击安装位置
2. 点击我要配置分区
3. 点击左上角的完成
4. 添加挂载点
5. 再点击左上角的完成
6. 点击接受更改

image
image
image
image

KDUMP(记录Linux系统崩溃时的信息)
  • 由于需要占用一些空间,而目前又是一个学习,因此这边就关闭了

  • 生产环境中建议打开

网络和主机名

image

SECURITY POLICY 安全策略

说白了就是设置一些用户名账户密码时为您进行一些提示之类的,关闭即可。
image

点击开始安装后,设置root的密码,再新增个用户

image
image

image

等待安装完成即可

基础知识储备

虚拟机的3种网络连接方式

  • 桥接模式

    • 会与主机共用同一个网段的ip地址,例如主机ip地址为192.168.1.23,那么虚拟机的ip地址就可能是192.168.1.25,该虚拟机可以与同网段的任何计算机通信,例如使用ping的方式。(可能会造成ip冲突的情况,比如一个教室有200台电脑,每台电脑都装一个虚拟机,都使用桥接模式)
  • NAT模式(网络地址转换)

    • 会在主机上创建一个网卡,与主机并不是同一个网段的地址。不会造成ip冲突。主机仍然可以直接ping通该虚拟机,但是外部其他的计算机无法ping通该虚拟机,虚拟机也可以直接ping通外部的主机及其他外部计算机
  • 主机模式(一台独立的主机,无法与外部计算机通信)

虚拟机的克隆(2种方式)

  • 直接复制整个虚拟机的文件夹(使用时直接用虚拟机打开即可)
    image

  • 使用虚拟机的克隆功能
    image

虚拟机的快照

  • 相当于保存了当前虚拟机的状态,可以任意的切换到不同的快照。

  • 使用场景:当要执行一些重要操作时无法保证Linux系统不会出现一些问题时(文件损坏、数据丢失等),可以使用快照功能。
    image
    image

VMtools(虚拟机与主机共享文件夹)

VMtools的安装

  1. 进入centos系统(使用root用户)

  2. 如果桌面上有一个Centos 7 x86_64 ,右键它点击弹出

  3. 点击虚拟机软件上的菜单:虚拟机 -> 安装VMware Tools(重新安装也可以点)
    image

  4. 打开桌面中出现的这个VMware Tools

  5. 将其中的VMwareTools-10.3.10-13959562.tar.gz文件拷贝到 /opt目录下

  6. 在桌面右键 -> 打开终端,执行如下命令,完成文件的解压

cd /opt
tar -zxvf VMwareTools-10.3.10-13959562.tar.gz

  1. 进入已经解压好的目录vmware-tools-distrib,执行里面的vmware-install.pl安装文件
cd vmware-tools-distrib/
./vmware-install.pl
# 完成如上2个步骤后,一直按回车下一步
  1. 安装完毕,显示如下效果
    image

  2. 注意Centos需要安装GCC(由于在安装时候我已经选择了一下默认的软件,其中包含了GCC,所以无需单独安装)

设置共享文件夹

  • 在主机中任意目录下创建一个文件夹
    image

  • 打开虚拟机软件,选择指定的虚拟机,点击设置
    image

  • 点击选项 -> 共享文件夹 -> 总是启用 -> 添加刚刚创建的文件夹 -> 最后点击确定
    image

  • Linux如果要找到该目录的话,在 /mnt/hgfs/目录下即可看到
    image

Linux目录结构

  • Linux的一切软件、配置、硬件等设备都是以文件方式来表示的。

  • 在linux的世界,一切皆为文件

  • Linux的目录是一个树状的结构,其根目录为: “/”

常见的目录结构

  1. /bin(常用),存放Linux的常用命令

  2. /sbin,其中的s为super,代表管理员所使用的命令

  3. /home(常用),存放普通用户的主目录,普通用户登录后默认会进入其主目录

  4. /root(常用),该目录为root用户的主目录

  5. /lib,一些系统开机所需要使用的动态连接共享库,类似于Windows中的dll文件,几乎所有的应用程序都需要用到这些共享库

  6. /lost+found,在Linux非法关机后,会生成一些文件存放在该路径(默认为隐藏目录)

  7. /etc(常用),通常放一些配置文件,例如mysql的配置文件my.conf

  8. /usr(常用),一般存放一些用户所安装的应用程序

  9. /boot,存放Linux开机时所需的一些引导文件

  10. /proc,是一个虚拟目录,是Linux内存的映射,可以获取一些系统信息

  11. srv,service的缩写,存放一些Linux系统服务

  12. /sys,系统内核有关的文件

  13. /tmp,存放临时文件

  14. /dev,存放与硬件有关的文件

  15. /media,存放一些媒体有关的文件,例如插入的U盘、光驱等

  16. /mnt,存放一些需要挂载的文件夹等

  17. /opt,一般存放一些安装文件

  18. /usr/local(常用),给主机额外安装软件的目录

  19. /var(常用),一般存放一些不断扩充的文件,比如日志。

  20. /selinux,security-enhanced-linux,是Linux的安全子系统,能控制程序只能访问特定文件

远程连接到Linux服务器

Xshell和XFtp获取的地址

下载地址

获取Linux服务器的ip地址(ifconfig命令)

image

判断主机与Linux系统是否可以连通(ping命令)

image
看到类似如上的界面说明可以连通

使用Xshell或者XFtp连接Linux服务器

  • 只要保证连接时,主机名与Linux服务器的ip地址一致即可。

Vi与Vim编辑器

其实Vim编辑器相当于是Vi编辑器的升级版,两者都快捷键基本都差不多,因此这里只讲解Vim编辑器的常用操作

Vim编辑器的三种模式

  • 正常模式(默认打开文件就是该模式)
    • 该模式可以上下左右到移动光标
  • 插入模式
    • 正常模式下,按下i就可以进入插入模式,进行文本的编辑
    • 命令行模式下,按下esc键进入正常模式,再按下i即可进入插入模式
  • 命令行模式
    • 正常模式下,输入":"或者"/"即可进入命令行模式
    • 插入模式下,按下esc键进入正常模式,再输入":"或者"/"即可进入命令行模式

Vim的常用快捷键

1. 拷贝当前行并粘贴

在正常模式下,将光标移动在需要拷贝到行,按2下y键,而后按p键粘贴即可

2. 拷贝5行并粘贴(从上至下)

在正常模式下,将光标移动在需要拷贝的5行中第1行的位置,按下5yy三个按键,而后按p键粘贴即可

3. 删除当前行

在正常模式下,将光标移动到需要删除的那一行,按2下d键即可删除

4. 删除5行(从上至下)

在正常模式下,将光标移动到需要删除的5行中第1行的位置,按下5dd三个按键即可删除

5. 查找功能,例如查找某个单词

在命令行模式下,输入 /单词名,之后按回车,即可查找到相对应的单词,按n即可切换到下一个,按shift + n为切换到上一个

6. 设置行号

在命令行模式下,输入 :set nu即可添加行号, 输入 :set nonu则会去除行号

7. 切换到文档的开头、末尾、以及指定行

  • 光标移动到开头:在正常模式下,按下gg即可

  • 光标移动到结尾:在正常模式下,按下G即可

  • 光标移动到指定行:在正常模式下,按下指定行 + shift + g即可,例如5 + shift + g

8. 撤销进行的操作

  • 在正常模式下,按下u即可

开机、重启、切换用户及注销

关机及重启指令

命令 作用
shutdown -h now 立即关机
shutdown -h 1 一分钟后关机(只输入shutdown时候默认1分钟后关机)
shutdown -r now 立即重启
halt 立即关机
reboot 立即重启
sync 将内存中的数据同步到硬盘(每次关机或重启时执行一次)
  • 虽然shutdown、reboot、halt等命令在执行前都会先执行sync命令,但是小心驶得万年船,还是手动执行一次sync再执行关机和重启等指令。

切换用户及注销

  • 如果一个用户想要切换到其他用户,需要使用: su - 用户名 这个指令

  • 如果切换的用户权限比当前用户高,则需要输入密码,否则不用

  • 注销当前用户:logout命令,仅在非图形化界面时有效

用户管理

创建、修改密码、删除用户

创建用户、创建用户时指定home目录、创建用户时指定用户组、修改用户的用户组

# 创建用户,默认创建一个同名的文件夹放在/home目录下作为该用户的家目录,默认创建一个同名的用户组,将该用户放在创建的用户组中
useradd zhangsan

# 创建用户时指定home目录
useradd -d /home/test/ zhangsan

# 创建用户时指定用户组
useradd -g myGroup zhangsan

# 修改用户组
usermod -g myGroup zhangsan

修改用户密码、删除用户(保存home目录)、删除用户(不保存home目录)

# 修改密码
passwd zhangsan

# 删除用户(保存home目录)
userdel zhangsan

# 删除用户(不保存home目录),不建议
userdel -r zhangsan

创建用户组、删除用户组

# 创建用户组
groupadd myGroup

# 删除用户组
groupdel myGroup

查看某个用户

指令为: id 用户名

识别当前使用的是哪个用户

记录的是登入系统时候的用户,指令为:who am i

用户和组相关文件(了解)

  • /etc/passwd文件(记录用户的各种信息)

    • 每一行的含义: 用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录的Shell
  • /etc/shadow文件(用户口令的配置文件)

  • /etc/group文件(用户组的配置文件)

Linux实用指令

Linux的运行级别

0:关机
1:单用户(找回root密码)
2:多用户无网络连接
3:多用户有网络连接(常用)
4:系统未使用保留给客户
5:图形界面
6:系统重启

查看及修改Linux默认的运行级别

  • centos7以前,在/etc/inittab文件中直接修改

  • centos7之后,将运行级别以英文表示

    • 模式3:multi-user.target
    • 模式5:graphical.target
  • 查看当前默认的运行级别

    • systemctl get-default
  • 修改当前默认的运行级别为5

    • systemctl set-default graphical.target

修改当前Linux运行级别

  • 语法定义
    init [0~6]

  • 例如修改到运行模式3
    init 3

找回root密码

  1. 启动系统,在开机界面中按e进入编辑界面

  2. 在编辑界面中,移动光标到以“Linux16”开头所在的行数,移动到行的最后输入:init=/bin/sh

  3. 按下Ctrl + x快捷键即可进入单用户模式

  4. 在光标闪烁的位置输入:mount -o remount,rw / 后按回车

  5. 在新的一行输入passwd按回车完成密码的修改

  6. 输入 touch /.autorelabel 按回车

  7. 输入 exec /sbin/init 按回车

  8. 等待开机即可。

文件目录类指令

pwd指令

获取当前工作目录的绝对路径

ls指令

  • 作用:查看目录下所有文件及文件夹、查看一个文件

  • 基本语法:ls [选项] [目录或是文件]

  • 常用选项:

    • -a 显示所有文件,包括隐藏

    • -l 以列表的方式显示信息(比较详细)

  • 使用示例

# 显示当前目录下的所有文件和文件夹,包括隐藏文件,并使用列表方式显示
ls -al

# 使用列表方式显示/home目录下的所有文件及文件夹
ls -l /home

cd指令

  • 作用:切换工作目录

  • 基本语法:cd [参数]

  • 常用参数

    • ~:表示当前用户的家目录
    • ..:表示上一级路径
    • ./:表示当前路径
  • 使用示例

# 切换到/root目录
cd /root

# 切换到上一级目录
cd ..

# 切换到当前用户的家目录
cd ~

mkdir指令

  • 基本语法:mkdir [选项] 要创建的目录

  • 常用选项:

    • -p 创建多级目录
  • 使用示例

# 在当前目录下创建一个 aaa的目录
mkdir aaa

# 在当前目录下创建一个 bbb/ccc的目录(多级)
mkdir -p bbb/ccc

rmdir指令、rm指令

  • rmdir指令基本语法:rmdir [选项] 要删除的空目录

  • rm指令基本语法:rm [选项] 要删除的文件或目录

    • 常用选项如下:
    • -r,表示递归(删目录的时候可以用)
    • -f,表示强制删除不提示
  • 使用示例

# 删除当前目录下的一个空目录aaa
rmdir aaa

# 删除当前目录下的一个非空目录bbb
rm -rf bbb

touch指令

  • 基本语法:touch [文件名]

  • 使用示例:

# 在当前目录下创建一个a.txt文件
touch a.txt

cp指令

  • 基本语法:cp [选项] source dest

    • source需要被复制的文件或目录,dest文件或者目录需要被复制的位置
  • 常用选项

    • -r,表示递归(复制文件夹时候需要用到)- \cp,强制覆盖相同的文件或目录,不进行提示
  • 使用实例

# 复制当前目录下的hello.txt文件并修改文件名
cp hello.txt hello2.txt

# 复制/root/aaa文件夹到 /root/demo文件夹当中
cp -r /root/aaa /root/demo/

# 出现重复文件夹或目录时强制覆盖不提示
	# 执行第一次成功
\cp hello.txt /root/aaa 
	# 执行第二次直接覆盖,不会提示
\cp hello.txt /root/aaa
  • 小提示:复制文件时,若指定了dest的文件名,则会使用dest指定的新名字。复制目录时,若指定了dest的目录名,则会使用dest指定的目录名

mv指令

  • 基本语法:mv [选项] source dest

  • 使用示例

# 将文件重命名
mv hello.txt hello2.txt

# 将当前目录下的hello.txt 移动到/home/tom/目录下
mv hello.txt /home/tom/

# 移动/root/aaa 到 /home/tom目录下
mv /root/aaa/ /home/tom/

cat指令,可以配合more

  • 基本语法:cat [选项] 要查看的文件

  • 常用选项

    • -n :显示行号
  • 使用示例

# 查看当前目录下的hello.txt并且显示行号
cat -n hello.txt

# 配合管道命令more查看文件
cat hello.txt | more

less指令(动态读取)

  • 当读取一个比较大的文件时,可以使用该指令

  • 基本语法:less 需要查看的文件

  • 使用示例

# 查看/etc/profile文件
less /etc/profile

echo指令

  • 基本语法:echo 需要输出的内容

  • 使用示例

# 使用echo输出hello
echo "hello"

head指令

  • 作用:获取文件前几行的内容(默认为10)

  • 基本语法: head [选项] 需要查看的文件

  • 常用选项

    • -n : 指定查看前多少行
  • 使用示例

# 查看当前目录下的hello.txt文件的前5行
head -n 5 hello.txt

tail指令

  • 作用:获取文件后几行的内容(默认为10)

  • 基本语法:tail [选项] 需要查看的文件

  • 常用选项

    • -f:实时追踪该文档所有更新
    • -n:指定显示多少行
  • 使用示例

# 查看/etc/profile文件最后5行
tail -n 5 /etc/profile

# 实时监控/home/tom/hello.txt文件(使用vim修改无法监控到)
tail -f /home/tom/hello.txt

> 指令和 >>指令(文件不存在则创建)

> :输出重定向(会格式化原有的文件再写入,相当于覆盖写)
>> : 追加数据
  • 使用示例
# 将当前目录列表的内容写入文件a.txt(覆盖写)
ls > a.txt

# 列表的内容追加到文件a.txt
ls >> a.txt

# 将a.txt的内容覆盖到b.txt的内容
cat a.txt > b.txt

# 将hello追加到a.txt文件中
echo "hello" >> a.txt

ln指令

  • 作用:创建一个软件链接(类似于Windows的快捷方式)

  • 基本语法:ln -s [原文件或者目录] 软链接名

  • 使用示例

# 在/home/tom/目录下创建一个软连接myroot,连接到/root目录
ln -s /root /home/tom/myroot

history指令

  • 作用:查看历史指令

  • 基本语法:history

  • 使用示例
    image

# 查看历史指令
history

# 根据编号使用历史指令
!117

时间日期类指令

date指令

  • 作用:获取日期

  • 基本语法: date [选项] 输出的格式

  • 常用选项:

    • -s:修改当前时间
  • 使用示例

# 获取当前时间
date

# 根据指定格式获取当前时间
date "+%Y-%d-%m %H-%M-%S"

# 修改当前时间
date -s "2022-8-9 9:40:00"

cal指令

  • 作用: 获取日历信息

  • 基本语法:cal [选项]

  • 使用示例

# 获取当月日历
cal

# 获取2022年的日历
cal 2022

搜索查找类

find指令

  • 作用:根据指定的规则查找文件及目录

  • 基本语法:find 搜索的路径 [选项]

  • 常用选项

    • -name :根据目录或文件名查找
    • -user : 根据文件或目录的所有者查找
    • -size : 根据大小查找,有K、M、G的单位,大于100k:+100K,小于100k: -100K,等于100K:100K
  • 使用示例

# 在根目录下查找名称为hello.txt文件
find / -name hello.txt

# 在/home目录下查找属于tom用户的文件及文件夹
find /home -user tom

# 在根目录下查找大于100M的文件
find / -size +100M

# 在根目录下查找小于100M的文件
find / -size -100M

# 在根目录下查找等于100M的文件
find / -size 100M

locate指令

  • 作用:快速定位文件路径

  • 基本语法:locate 文件名

  • 使用前提:必须先执行updatedb,更新本地的文件索引数据库

  • 使用示例

# 查找hello.txt文件
locate hello.txt

which 指令

  • 作用: 查询某个指令在哪个目录下

  • 使用语法: which 指令名

  • 使用示例

# 查询cd指令所在的目录
which cd

# 查询useradd指令所在的目录
which useradd

grep 指令及管道符号 “|”

  • 作用:

    • grep指令作用:能够过滤文件夹及目录,根据指定的名称模糊查询
    • “|”管道符号作用:能够将上一次处理的结果交给下一个指令处理
  • 基本语法

    • grep :grep [选项] 文件名或目录名 [模糊匹配的字符串]
  • 常用选项

    • -n : 显示行号
    • -i :忽略大小写
  • 使用示例

# 获取当前目录下的hello.txt文件中包含yes的行及行号
grep -n "yes" hello.txt

# 将cat获取到的hello.txt文件传递给grep处理并且筛选出包含yes的行及行号
cat hello.txt | grep -n "yes"

压缩及解压类

gzip和gunzip

  • 作用: 压缩一个文件及解压一个文件,格式为:gz

  • 基本语法

    • 压缩:gzip 文件名
    • 解压:gunzip 压缩包名
  • 使用示例

# 压缩一个文件,当前目录的hello.txt文件
gzip hello.txt

# 解压一个文件,当前目录的hello.txt.gz文件
gunzip hello.txt.gz

zip和unzip

  • 作用:压缩多个文件及目录,格式为zip

  • 基本语法

    • 压缩: zip [选项] 指定压缩后的文件名 [需要压缩的文件或目录]可以写多个

      • 常用选项:-r压缩一个目录
    • 解压:unzip [选项] 指定压缩文件

      • 常用选项:-d 指定解压到的目录
  • 使用示例

# 压缩/home目录并将压缩包的名字设置为 myhome.zip
zip -r myhome.zip /home

# 压缩当前目录下的 hello.txt 和 hello2.txt ,压缩包名称为 mulit_hello.zip
zip mulit-hello.zip hello.txt hello2.txt

# 解压当前目录下的myhome.zip到 /home/demo目录下
unzip -d /home/demo myhome.zip

tar指令

  • 作用:压缩多个文件及目录(tar.gz)格式

  • 基本语法

    • 压缩:tar [选项] 压缩后的文件名 需要压缩的文件或目录
    • 解压: tar [选项] 需要解压的文件名 [-C 解压到的目录(可选)]
  • 常用指令

    • z:打包同时压缩
    • x:解包.tar文件
    • v:显示详细信息
    • f:指定压缩后的文件名
    • c:产生.tar打包文件
  • 使用示例

# 压缩hello.txt及hello2.txt文件,压缩包的名称为:hello.tar.gz压缩包
tar -zcvf hello.tar.gz hello.txt hello2.txt

# 解压hello.tar.gz压缩包到/home/demo目录下
tar -zxvf hello.tar.gz -C /home/demo

组管理及权限管理

Linux组的基本介绍

Linux中每个文件都有所有者、所在组、其他组的概念

- 所有者:默认一般为文件或文件夹的创建者(可修改)
- 所在组:默认一般为文件或文件的创建者所在的组(可修改)
- 其他组:不是同一个组那么就属于其他组了呗

使用ls -l所查看到的文件信息

image

  • 前面的10位

    • 第一位:表示文件类型
      • d:目录
      • - : 文件
      • c : 字符设备文件,例如鼠标键盘
      • b : 块设备,比如硬盘
      • l : 代表是一个链接,相当于Windows的快捷方式
    • 剩下的每3位分别代表
      • 2~4:代表文件所有者所拥有的权限
      • 5~7:代表文件所在组所拥有的权限
      • 8~10:代表文件其他组所拥有的权限
  • 这里的那个4,代表home这个文件中包含的子文件夹(不包含子文件夹的子文件夹)加上文件的数量

  • 第一个root:代表文件的所有者

  • 第二个root:代表文件的所在组

  • 4096:代表4096字节,也就是4K

  • 8月:代表8月创建的

  • 9 :该文件有9字节大小

  • 10:11 文件的最后修改时间

文件、目录的可读可写可执行分别代表什么

  • 文件
    • 可读:代表文件可以读取内容
    • 可写:代表文件可以写入内容
    • 可执行:代表可以执行该文件(前提是该文件确实可以执行)
  • 目录
    • 可读:可以ls查看目录中的内容
    • 可写:可以删除、增加目录中的文件
    • 可执行:可以进入该目录

修改文件的所有者

  • 基本语法:chown [选项] 用户名 文件或者目录

  • 常用选项

    • -R:递归目录及其子文件夹、文件等
  • 使用示例

# 将/home/tom 文件夹及其子文件夹、子文件的所有者修改为jack用户
chown -R jack /home/tom

# 将/home/hello.txt 文件的所有者改为 tom用户
chown tom /home/hello.txt

修改文件的所有组

  • 基本语法:chgrp [选项] 组名 文件或者目录

  • 常用选项

    • -R:递归目录及其子文件夹、文件等
  • 使用示例

# 将/home/tom 文件夹及其子文件夹、子文件的所有组修改为wudang组
chgrp -R wudang /home/tom

# 将/home/hello.txt 文件的所有组改为 wudang组
chgrp wudang /home/hello.txt

修改文件的权限

采用字母的方式

  • 基本语法:chmod [选项] [权限] 文件或者目录

  • 常用选项

    • -R:递归目录及其子文件夹、文件等
  • 权限

    • u:所有者
    • g:所在组
    • o:其他组
    • a:如上三者
  • 使用示例

# 将/home/hello.txt所在组的权限设置为可读可写,其他组的权限设置为可读
chmod g=rw,o=r /home/hello.txt

# 将/home/hello.txt 所在组的权限撤掉可读
chmod g-r /home/hello.txt

# 将/home/tom整个目录及其子文件夹跟文件的其他组权限设置为可读可写
chmod -R o=rw /home/tom

采用数字的方式(一次性要设置全部)

  • 基本语法:chmod [选项] [权限] 文件或者目录

  • 常用选项

    • -R:递归目录及其子文件夹、文件等
  • 权限:每一组对应一个数字

    • r:代表4
    • w:代表2
    • x:代表1
  • 使用示例

# 将/home/hello.txt所有者权限设置为可读可写可执行, 所在组的权限设置为可读可写,其他组的权限设置为可读
chmod 764 /home/hello.txt

# 将/home/tom整个目录及其子文件夹跟文件的 所有者、所在组、其他组 的权限均设置为可读可写
chmod -R 666 /home/tom

定时任务调度

crond重复任务调度

crond表达式定义规则

  • 基本语法:crontab [选项]

  • 常用选项:

    • -e:编写调度任务

    • -l:列出当前用户的调度任务

    • -r:删除所有调度任务

  • crond表达式5位分别代表的含义

分别为:分钟 小时 日 月 周

  • 特殊符号

    • */4 * * * *:四分钟执行一次

    • 1,4 * * * *:每小时的第1分钟、第4分钟执行一次

    • 1-4 * * * *:1到4分钟每分钟执行一次

    • * * * * *:*号代表任何时间,因此这条语句代表每分钟执行一次

crond使用示例

# 添加一个每分钟执行一次的任务,指令为 date > /tmp/a.txt
1. crontab -e
2. 在任务界面输入:*/1 * * * * date > /tmp/a.txt
3. 保存退出即可

# 添加一个每分钟执行一次的任务,执行一个sh脚本
1. 创建一个脚本文件,例如 touch /tmp/myWork.sh
2. 在该脚本文件中随便写2条语句,例如
cal >> /tmp/aa.txt
date >> /tmp/aa.txt
3. 为该文件添加可执行权限,例如 chmod u+x /tmp/myWork.sh
4. crontab -e
5. 输入 */1 * * * * /tmp/myWork.sh
6. 保存退出即可

关于crond表达式的练习

  1. 在每天22点45分执行命令
    45 22 * * *
  2. 每周1的17点0分执行命令
    0 17 * * 1
  3. 每月1号和15号的凌晨5点0分执行命令
    0 5 1,15 * *
  4. 每周一到周五的凌晨4点40分执行命令
    40 4 * * 1-5
  5. 每天的凌晨4点,每隔十分钟执行一次命令
    */10 4 * * *
  6. 每月1号和15号,每周1的0点0分都会执行命令。(提示:星期几和几号最好不要同时指定,因为定义的都是天)
    0 0 1,15 * 1

at一次性任务调度

保证atd的进程正在运行(看看进程)

查看atd进程是否正在运行:ps -ef | grep atd

at指令的运行原理

  • 底层会运行一个atd进程

  • 该进程每60秒会检查一下at任务列表

  • 如果有任务则会按照定义的时间帮助执行,执行结束后将其移除任务列表

at指令的基本使用

  • 基本语法:at [选项] 时间,按回车之后输入需要执行的任务,然后按两次Ctrl + d

  • 其他指令

    • atq : 查看所有at任务
    • atrm 任务号: 删除任务
  • at对于时间的定义(太丰富了)

    • 能够接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。 例如:04:00

    • 能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的词语来指定时间。

    • 能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。 例如:12pm

    • 能够指定命令执行的具体日期,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年),指定的日期必须跟在指定时间的后面。 例如:04:00 2009-03-1

    • 能够使用相对计时法。指定格式为:now + count time-units ,now就是当前时间,time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,几天,几小时。 例如:now + 5 minutes 04pm + 3 days

    • 能够直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。

使用示例

# 明天下午2点执行 date > /tmp/a.txt
1. at 2pm tomorrow
2. 输入date > /tmp/a.txt
3. 按2下Ctrl + d即可

# 3天后早上9点执行 date > /tmp/a.txt
1. at 9am + 3 days
2. 输入date > /tmp/a.txt
3. 按2下Ctrl + d即可

# 2分钟后,执行 date > /tmp/a.txt
1. at now + 2 minutes
2. 输入date > /tmp/a.txt
3. 按2下Ctrl + d即可

# 1分钟后,执行 /tmp/myWork.sh脚本(都是按照整数的1分钟)
1. at now + 1 minutes
2. 输入/tmp/myWork.sh
3. 按2下Ctrl + d即可

磁盘管理

对硬盘进行分区、挂载

对于分区、挂载的理解

  • 分区:一个硬盘可以被分成多个分区,相当于不想一整个直接用,就拆分一下。

  • 挂载:相当于让硬盘的分区与Linux的某个目录有了关联,进入该目录就相当于进入了该硬盘的分区

  • 卸载:让硬盘的分区与Linux上的目录取消关联

对于挂载更深的理解
  • 将一个分区挂载到一个目录上时

    • 如果该目录含有文件,那么你打开该目录时,会发现目录中的文件没有了,因为打开该目录已经相当于打开对应的硬盘分区了(卸载后再进入该目录才能看到)
  • 当进行卸载时

    • 原本在分区中的文件也还会存在,不过需要重新挂载到某个目录上,才可以访问到

Linux的硬盘分类

  • IDE硬盘
    IDE硬盘的驱动器标识符为:hdx~,其中的x为盘号,一般分为a基本盘、b从属盘、c辅助主盘、d辅助从属盘,代表分区,14代表主分区或扩展分区,5开始后是逻辑分区,例如hda3代表是第一个IDE硬盘上的第3个主分区或扩展分区

  • SCSI硬盘(基本都是这种)
    SCSI硬盘的驱动器标识符为:sdx~,其他的介绍跟IDE一致,就不多赘述了

查看所有设备的挂载情况

  • 指令:lsblk 或者 lsblk -f
    image

虚拟机中的Linux挂载一块硬盘

使用虚拟机软件为该Linux添加一块硬盘后重启Linux

image
image

为该硬盘进行分区(想分多个区就多用几次指令呗)
1. fdisk /dev/sdb
2. 输入n + 回车代表新增分区
3. 输入p + 回车代表新增主分区
4. 输入分区号,输入几就代表第几个区,1~4自行输入后按回车。我这输入1个
5. 输入w后按回车,代表写入并保存(如果不想保存,觉得搞错了,就输入q回车)

image

将该硬盘进行格式化
1. mkfs -t ext4 /dev/sdb1
将硬盘挂载到一个目录下,比如/newDisk
1. mkdir /newDisk
2. mount /dev/sdb1 /newDisk

image

设置/etc/fstab文件,使开机自动挂载
vim /etc/fstab
修改到如下图,再保存退出

image

卸载指令

umount 分区或挂载的目录
umount /dev/sdb1
umount /newDisk

硬盘状况管理

查询系统整体硬盘使用情况

  • 基本指令:df -h

查询指定目录的磁盘占用情况

  • 基本指令:du [选项] 指定目录

  • 常用选项

    • -s :指定目录占用大小汇总,size
    • -h :带计量单位
    • -a :包含文件,默认是不包含文件的
    • --max-depth=1 :子目录深度为1,可以改
    • -c :列出明细的同时增加汇总值
  • 使用示例

# 查询/opt目录磁盘占用情况,深度为1
du -hac --max-depth=1 /opt

磁盘情况的几个实用指令

统计/opt文件夹下文件的个数

ls -l /opt | grep "^-" | wc -l

统计/opt文件夹下目录的个数

ls -l /opt | grep "^d" | wc -l

统计/opt文件夹下文件的个数,包括子文件夹

ls -lR /opt | grep "^-" |wc -l

统计/opt文件夹下目录的个数,包括子文件夹

ls -lR /opt | grep "^d" |wc -l

以树状结构显示tree目录,若是没有该命令,执行一下yum install tree
tree /opt

网络配置

我们的虚拟机Linux是怎么上网的呢

  • 当我们给虚拟机指定NAT网络地址转换时,主机会建立一个网卡vmnet8

  • 我们的Linux虚拟机的网关、网段与vment8一致

  • linux通过主机上的vmnet8网卡来连接到互联网

查看windows系统及linux系统的ip地址

# windows查看ip地址的指令
在windows的cmd命令行执行:ipconfig

# linux查看ip地址的指令
在linux的终端上执行:ifconfig

Linux网络环境配置

DHCP自动获取

  • 一般默认情况下就为DHCP模式静态获取

指定静态IP

  • 确定虚拟机的网关及网段,(可以修改)

image
image

image

  • 修改Linux的文件,加上如下内容

需要修改的文件:vim /etc/sysconfig/network-scripts/ifcfg-ens33

1. 将BOOTPROTO="dhcp"中的dhcp改为static
2. 在末尾加上这3行
IPADDR=192.168.206.100
GATEWAY=192.168.206.2
DNS1=192.168.206.2

image

  • 重启network服务或重启linux
1. service network restart
2. reboot
  • 再次远程连接时要注意修改一下ip地址了

设置主机名和hosts映射

# 设置主机名,直接修改如下文件即可,重启生效
vim /etc/hosts

# 设置hosts映射
vim /etc/hosts
	#在新的一样加入如下格式的映射
	192.168.206.1 myWindows

进程管理

显示系统执行的进程

  • 基本指令: ps [选项]

  • 常用选项:

    • -aux:显示比较详细的进程信息
    • -ef:显示带父进程的进程信息
  • 使用示例

# 显示比较详细的进程信息
ps -aux

# 显示带父进程的进程信息
ps -ef

# 查询sshd的进程信息
ps -ef |grep sshd
ps -aux |grep sshd

杀死进程

  • 基本指令: kill [选项] 进程号

  • 常用选项:

    • -9 : 表示强制杀死进程
  • 使用示例

# 将远程登录的tom用户的sshd进程杀死
ps -aux | grep sshd 找到tom的进程
kill -9 tom的进程号

显示进程树

pstree -up,u代表显示进程的用户、p代表显示进程的pid

ps指令显示界面的常见内容

  • USER:用户名称

  • PID:进程号

  • %CPU:进程占用 CPU 的百分比

  • %MEM:进程占用物理内存的百分比

  • VSZ:进程占用的虚拟内存大小(单位:KB)

  • RSS:进程占用的物理内存大小(单位:KB)

  • TT:终端名称,缩写 .  STAT:进程状态,其中 S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R- 正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等

  • STARTED:进程的启动时间

  • TIME:CPU 时间,即进程使用 CPU 的总时间

  • COMMAND:启动进程所用的命令和参数,如果过长会被截断显示

服务管理

service所管理的服务

  • 基本语法: service 服务 [start|stop|restart|reload|status]

  • service能管理的服务在/etc/init.d目录中

  • 使用示例

# 查看network服务的状态
service network status

# 关闭network服务
service network stop

# 开启network服务
service network start

chkconfig指令(管理范围与service一致)

  • 使用示例
# 查看所有的服务在各运行级别的自启动状态
chkconfig --list

# 修改network服务在运行级别3时不自启动
chconfig --level 3 network off

# 修改network服务在运行级别3时自启动
chconfig --level 5 network on

systemctl所管理的服务

  • 基本语法: systemctl [start|stop|restart|reload|status] 服务名

  • systemctl能管理的服务在/usr/lib/systemd/system/目录中

查看、修改开机自启的服务

  • 有个指令叫做setup,也可以看到当前的系统服务
# 查看自启动列表,enable、disable分别代表开启自启与不自启
systemctl list-unit-files

# 将一个服务设置成非开机自启
systemctl disable 服务名

# 将一个服务设置成开机自启
systemctl enable 服务名

# 查看一个服务是否是开机自启
systemctl is-enabled 服务名

firewall防火墙常用指令

# 开放一个端口(注意最后的端口+协议,可以用netstat看)
firewall-cmd --permanent --add-port=3306/tcp

# 关闭一个端口
firewall-cmd --permanent --remove-port=3306/tcp

# 重新载入防火墙(对防火墙进行操作后重启下),如下2种都可以
firewall-cmd --reload
systemctl reload firewalld

# 查询一个端口(不知为何一直都是no)
frewall-cmd --query-port=3306/tcp

动态监控进程

  • 基本语法:top [选项]

  • 常用选项:

    • -d:表示多少秒更新一次

    • -i:使top不显示闲置或僵死进程

    • -p:通过监控进程id来仅仅监控某个进程的状态

  • 交互操作说明:

    • -P:以cpu占用率降序排序

    • -M:以内存占用率降序排序

    • N:以pid降序排序

    • q:退出top

  • 使用示例

# 监视特定用户,比如监控tom用户
1. top 指令
2. 输入u,再输入tom按回车

# 终止某个进程
1. top指令
2. 输入k,再输入进程号pid回车,再输入一个9回车

# 使用top时指定更新时间为10秒(默认为3)
top -d 10

监控网络状态

  • 基本语法:netstat [选项]

  • 常用选项:

    • -an :按照一定格式显示
    • -p : 显示哪个进程在调用
  • 使用示例

# 查看服务名为sshd的服务信息
netstat -anp | grep sshd

RPM与YUM包管理

RPM的常用指令

查询本系统中按照的软件

rpm -qa

查询某个软件的信息

rpm -qi 软件名

信息解析

tree-1.6.0-10.el7.x86_64

  • tree :软件名称

  • 1.6.0-10版本号

  • el7.x86_64适用的操作系统

  • 提示:如果为i686、i386表示32位系统,noarch表示通用

查询某个软件所安装的文件

rpm -ql

查询某个文件是被哪个软件安装的

rpm -qf 文件路径

安装软件

rpm -ivh 软件包

卸载软件

普通删除:rpm -e 软件名
强制删除:rpm -e --nodeps 软件名

YUM包常用指令

yum会安装软件时会从服务器上下载rpm包,然后进行安装。同时也会把该软件依赖的其他软件也一同安装

在yum服务器上查询某个软件,比如docker

yum list | grep docker

安装一个软件

yum install 软件名

Shell脚本的基本使用

如何在linux中使用shell脚本

  • 创建一个文件,以为.sh结尾

  • 给该文件添加可执行权限

  • 直接执行即可

定义普通/全局变量、销毁变量、指令赋值给变量

#!/bin/bash
# 定义普通变量
A=100
echo "A的值为:$A"

# 定义静态变量
readonly B=200
echo "B的值为:$B"

# 销毁一个变量(静态变量无法被销毁)
unset A
echo "A的值为:$A"

# 将指令赋值给变量(第1种方式)
C=`date`
echo "C的值为:$D"

image

设置环境变量(相当于全局变量,整个Linux系统都能使用)

1. vim /etc/profile
2. 在最后添加: export TOMCAT_HOME=/usr/local/tomcat/
3. 刷新:sourse /etc/profile
4. 输出测试下:echo $TOMCAT_HOME

位置参数变量

  • $n,这里的n表示第0到n个参数,参数大于等于10个时,需要使用 ${n}获取

  • $#,表示你输入了多少个参数

  • $*,表示你输入的参数将会变为一个整体

  • $@,会拆分你输入的参数,有几个就是几个(后续会通过for来更好的理解与$*的区别)

#!/bin/bash
NUM0=$0
NUM1=$1
NUM2=$2
echo "第0个参数为:$NUM0(注意取0时默认为命令的本身),你输入的第1个参数为:$NUM1,你输入的第三个参数为:$NUM2"
echo "你输入的参数个数为: $#"
echo "你输入的参数作为一个整体时:$*"
echo "你输入的参数不作为一个整体时:$@"

image

单行注释与多行注释

#!/bin/bash
:<<!

这是一段多行注释

!

# 这是一段单行注释

运算符的使用(3种方式)

#!/bin/bash
# 第一种运算符使用的方式
NUM1=$((2+3))
echo "num1的值为:$NUM1"

#  第二种运算符使用的方式
NUM2=$[3+3]
echo "num1的值为:$NUM2"

#  第三种运算符使用的方式
NUM3=`expr 1 + 2`
echo "num3的值为:$NUM3"

条件判断(条件判断的表达式中括号左右两侧以及运算符之间需要有空格)

  • 字符串是否相等: =

  • 一个空的表达式:[ ],表示0,也就是假。如果里面有内容,则为1,也就是真

  • 数值之间进行比较

    • 小于:-lt

    • 小于等于:-le

    • 大于:-gt

    • 大于等于:-ge

    • 等于:-eq

    • 不等于:-nq

  • 权限进行比较(所有者、所在组、其他组的任何一方有其中的权限都可判断成功)

    • 是否可读:-r
    • 是否可写:-w
    • 是否可执行:-x
  • 文件判断

    • 是否存在并且是一个文件:-f
    • 是否存在并且是一个目录:-d
    • 是否存在:-e
#!/bin/bash
# 判断字符串ab是否等于ab 
if [ "ab" = "ab" ]
then
        echo "看来ab确实等于ab"
fi

# 判断15是否小于20
if [ 15 -lt 20 ]
then
        echo "15小于20,没毛病"
fi

# 判断/tmp/test/a.txt文件是否可执行
if [ -x /tmp/test/a.txt ]
then
        echo "看来是可执行的"
fi

# 判断/tmp/test/a.txt文件是否存在
if [ -f /tmp/test/a.txt ]
then
        echo "存在"
fi

&&的使用

#!/bin/bash
# 如果&&左边的表达式成立,就执行右边的表达式
[ "ab" = "ab" ] && echo "今天天气真好"

多分支if使用

#!/bin/bash
# 从控制台输入一个数,如果大于10就提示大于10,否则提示小于10
if [ $1 -gt 10 ]
then
	echo "大于10"
elif [ $1 -lt 10 ]
then
	echo "小于10"
fi

image

for循环(2种方式)

  • 使用$*
#!/bin/bash
for i in "$*"
do
	echo "你输入的值有:$i"
done

image

  • 使用$@
#!/bin/bash
for i in "$@"
do
	echo "你输入的值有:$i"
done

image

  • 使用fori的方式
#!/bin/bash
SUM=0
for(( i=1;i<=10;i++ ))
do
        SUM=$[$SUM+i]
done
echo "值为:$SUM"

while循环

#!/bin/bash
# 计算1加到10
SUM=0
i=1
while [ $i -le 10 ]
do
        SUM=$[$SUM+$i]
        i=$[$i+1]
done
echo "值为:$SUM"

选择语句case

#!/bin/bash
# 从控制台输入一个数,为1就输出周一,为2输入周二,否则输出其他
case $1 in
"1")
        echo "周一"
;;
"2")
        echo "周二"
;;
*)# 表示不是以上模式则执行
        echo "其他"
;;
esac

image

read语句

参数:-t 指定输入时间,单位为秒,超时就停止等待
参数:-p 输入时的提示语句

#!/bin/bash
read -p "请输入一个数字:" NUM
echo "你输入的数字为:$NUM"

echo "=================================="

# 表示10秒不输入就停止等待
read -t 10 -p "请输入一个数字:" NUM2
echo "你输入的数字为:$NUM2"

自带函数basename 和 dirname

image

自定义函数、自带函数的使用

#!/bin/bash
function getsum(){
    local SUM=0
    for n in $@
    do
         ((SUM+=n))
    done
    return $SUM
}
# 第一次调用函数
getsum 10 20 55 15
RES1=$?
echo "第一次的结果为:$RES1"

# 第二次调用函数
getsum 10 20 55 10  # 调用函数并传递参数
RES2=$?
echo "第二次的结果为:$RES2"

# 第三次将一个指令的结果传递给RES3
RES3=`basename /tmp/test/a.txt`
echo "basename函数调用的结果为:$RES3"

image

练习,写一个shell脚本备份mysql数据库,其实可以简单一点

#!/bin/bash
# 获取备份时间
DATETIME=`date +%Y-%m-%d_%H%M%S`
# 获取备份目录
FILEDIR="/data/backup/db/"
# 如果目录不存在,则创建
[ ! -d $FILEDIR ] && mkdir -p $FILEDIR

# 备份数据库
mysqldump -uroot -prootroot --host=localhost -q -R --databases mydb > "${FILEDIR}${DATETIME}.sql"

# 将该文件压缩成tar.gz
cd $FILEDIR
tar -zcvf ${DATETIME}.tar.gz ${DATETIME}.sql

# 删除原有的文件
rm -rf ${FILEDIR}${DATETIME}.sql

# 删除10天前的备份文件
find ${FILEDIR} -atime +10 -name "*.tar.gz" | xargs rm -rf;

# 提示备份成功~
echo "备份成功,备份日期为:${DATETIME}"

日志管理

日志服务rsyslogd

系统常用的日志

  • /var/log/boot.log 系统启动日志

  • /var/log/cron 记录与系统定时任务相关的日志

  • /var/log/cups 记录打印信息的日志

  • /var/log/demesg 记录了系统开机时内核自检的日志,可以使用dmesg命令查看内核自检信息

  • /var/btmp 记录登录错误的日志,通过lastb查看

  • /var/log/lastlog 记录所有用户最后一次登录的日志信息

  • /var/log/maillog 记录邮件信息的日志

  • /var/log/message 记录Linux中绝大多数重要信息的日志,(系统出问题了第一时间看该日志)

  • /var/log/secure 涉及到验证和授权方面的信息、只要涉及账户和密码的程序都会记录。例如su切换用户、ssh用户登录

  • /var/log/wtmp 记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件,通过last命令查看

  • /var/tun/ulmp 记录当前已经登录的用户信息,通过w、who、users命令

rsyslogd的运行原理

  • 首先rsyslogd是一个后台进程,也可以称为是一个服务

  • 通过systemctl is-enabled rsyslogd可以看出该服务会开机自动运行

  • 该服务在启动时会读取/etc/rsyslog.conf文件,通过该文件中设置的规则写入日志

rsyslog.conf文件的格式

  • 基本格式*.*

  • 第一个*代表日志类型,第二个*代表日志级别

  • 日志类别

    • auth:pam产生的日志

    • authpriv:ssh、ftp等登录相关的验证信息

    • cron:时间任务相关

    • kern:内核相关

    • lpr :打印相关

    • mail:邮件

    • mark(syslog)-rsyslog :服务内部的信息,时间标识

    • news:新闻组

    • user:用户程序产生的相关信息

    • uucp:主机与主机之间相关的通讯信息

    • local 1-7 :自定义的日志设备

  • 日志级别

    • debug:有调试信息的

    • info:一般日志信息(常用)

    • notice:正常信息,比info级别高点

    • warning:警告级别

    • err:错误级别

    • crit:严重级别

    • alert:需要立刻修改的级别

    • emerg:内核崩溃等重要信息

    • none:什么都不记录(啥也不干)

生成的日志文件的格式

  • 例如/var/log/secure中随意拿一行过来
Aug 11 11:27:31 codeStars01 sshd[63135]: Accepted password for tom from 192.168.206.1 port 56667 ssh2

Aug 11 11:27:31 代表该条日志生成的时间

codeStars01 产生事件的主机名

sshd[63135] 产生事件的服务名或程序名

Accepted password for tom from 192.168.206.1 port 56667 ssh2 事件的具体信息

自定义日志

  1. 创建一个存储日志的文件touch /var/log/codeStars.log

  2. 修改日志服务的配置文件
    vim /etc/rsyslog.conf
    在最后添加一行呗
    image

  3. 重启下日志服务让配置生效
    systemctl restart rsyslog

日志轮替

日志轮替logrotate

日志轮替的理解:就是把旧的日志文件移动并改名,同时建立新的日志文件,当旧日志文件超出保存的规则时就将其删除。

logrotate.conf配置文件(记录所有日志的轮替规则)

# 每周对日志文件进行一次轮替
weekly

# 最多保存4个旧的日志文件
rotate 4

# 创建新的空日志文件,在日志轮替后
create

# 使用日期作为日志轮替文件的后缀
dateext

# 如果解开注释,则会将转存的日志文件压缩
#compress

# 读取一个文件夹中的所有配置(存放单独指定某个日志的轮替规则的文件,可以有多个)
include /etc/logrotate.d

# 如下为单独设置,优先级比上面默认的规则更高
/var/log/wtmp {
	monthly # 每个月对日志进行一次轮替
	create 0664 root utmp # 建立新的日志文件,权限为0664,所有者为root,utmp为所在组
	minsize 1M # 当原本的日志文件未超过1M时,不进行日志轮替
	rotate 1 # 仅宝轮一个日志备份
}

var/log/btmp {
	missingok # 如果日志不存在,则忽略日志的警告信息
	monthly # 一个月轮替一次
	create 0600 root utmp 
	rotate 1

}

参数说明

  • daily 日志的轮替周期为每天

  • weekly 日志的论题周期为每周

  • monthly 日志的轮替周期为每月

  • rotate 数字 : 日志的备份数量

  • compress:日志轮替时,将旧的日志进行压缩

  • create mode owner group :建立新日志,通知指定新日志的权限、所有者、所属组

  • mail address 当日志轮替时,输出内容通过邮件发送到指定的邮件地址

  • missingok:如果日志为空文件,则忽略该日志的警告信息

  • notifempty 如果日志为空文件,则不进行轮替

  • minsize 大小 : 日志轮替的最小值,也就是当原日志文件未达到该大小则不进行轮替

  • size 日志只有大于该指定的大小才进行轮替(不再按照时间进行轮替)

  • dateext 使用日期作为日志轮替文件的后缀

  • sharedscripts 在此关键字后的脚本只执行一次。

  • prerotate/endscript 在日志轮替之前执行脚本命令

  • postrotate/endscript 在日志轮替之后执行脚本命令

将自己的日志添加到日志轮替中(2种方式)

  • 直接在/etc/logrotate.conf 中添加(不推荐)

  • 在/etc/logrotate.d目录中添加一个文件,将内容调整为如下即可(推荐):

你的日志文件地址
{
	你的日志规则参数
}

日志轮替的运行原理

  • 在/etc/corn.daily目录中可以看到logrotate的shell脚本。

  • 日志轮替就是通过crond定时任务调度系统来实现的

内存日志journalctl

  • 该日志将会存储系统的各种日志,存储到内存,每次关机或重启都会被清理掉

常用指令

  • journalctl 查看全部

  • journalcatl -n 3查看最新3条

  • journalcatl --since 19:00 --until 19:10:10查看指定时间的日志

  • journalcatl -p err查看报错日志

  • journalcatl -o verbose日志详细内容

  • journalcatl _PID=1245 _COMM=sshd查看包含这些参数的日志

Linux内核升级

查看当前可升级的内核版本

yum list kernel -q

查看已安装的内核版本

yum info kernel -q

查看当前内核版本

uname -a

更新内核版本

yum update kernel

备份与恢复

Linux的恢复与备份的2种方式

  • 直接把需要的文件压缩后保存到其他主机上即可

  • 通过dump和restore命令进行备份与恢复

  • 使用dump和restore命令需要先安装yum -y install dumpyum -y install restore

dump命令的使用(支持增量备份)

参数介绍

  • -0123456789:备份的层级
  • -f:指定备份后的文件名
  • -j:使用bzlib库压缩备份文件
  • -u:备份完毕后,在/etc/dumpdates中记录备份的文件层级、时间等

dump为分区进行备份(可以增量备份)

# 将/boot分区所有内容备份到/opt/boot.bak0.bz2文件中,备份层级为0
dump -0ju -f /opt/boot.bak0.bz2 /boot

# 在/boot目录下增加新文件,而后进行增量备份
dump -1ju -f /opt/boot.bak1.bz2 /boot

# 参数u有点相当于就是增量备份了

dump为目录或文件进行备份(不支持增量备份)

# 使用dump备份/etc整个目录
dump -0j -f /opt/etc.bak.b2z /etc

# 如果使用备份层级为1时,将会直接报错,因为不支持增量备份
dump -1j -f /opt/etc.bak1.b2z /etc

使用restore恢复

restore的4个模式

  • -C:使用对比模式,将备份的文件与已存在的文件相互对比。

  • -i:使用交互模式,在进行还原操作时,restore指令将会询问用户

  • -r:进行还原模式

  • -t:查看模式,查看备份的文件中有哪些文件

参数 -f ,指定需要操作的备份文件

比较备份文件boot.bak.bz2与原文件/boot的区别

restore -C -f boot.bak.bz2

查看备份的文件boot.bak.bz2中有哪些文件

restroe -t -f boot.bak.bz2

还原boot.bak.bz2操作,(若为增量备份则需要从层级0开始还原到最后一个层级)

注意:在哪个目录进行还原操作,就会还原到哪

restore -r -f /opt/boot.bak.bz2
posted @ 2022-08-11 20:27  CodeStars  阅读(272)  评论(0编辑  收藏  举报