JAVA入门基础_Linux基础入门理解
Linux操作系统
Linux操作系统的应用领域
-
桌面应用领域(例如Ubuntu、Debian等)
-
服务器领域是Linux系统最强的领域(免费、稳定、安全、对多并发的处理、高效等)
-
嵌入式领域(可以根据需要对软件进行裁剪)
VMware虚拟机的安装
在BIOS中开启操作系统的虚拟化
-
一般笔记本电脑自动开启
-
按照不同的计算机主板在开机时按指定按键进入BIOS
-
找到Configuration或Security选项
-
选择Virtualization或Intel Virtual Technology
-
将其设置为Enable开启状态即可
虚拟机的实际安装
-
进入虚拟机的官网下载一个虚拟机,这里使用的是15.5.1的版本,这边提供一个下载链接
-
安装时注意修改一下安装位置即可,其他的一律下一步
-
安装打开后
Centos7.6版本的安装
下载Centos操作系统的镜像
下载Centos7.6版本,可以点击下载地址
使用VMware虚拟机软件创建一个虚拟机
-
点击左上角的文件 -> 选择创建虚拟机
-
选择典型后点击下一步
-
选择稍后安装操作系统后点击下一步
-
将客户机操作系统选择为Linux,并将版本选择为Red Hat Enterprise Linux7 64位
-
可以修改虚拟机的名称、也可以更改虚拟机的安装位置(自行修改)
-
选择最大磁盘大小(如果不够了,后续是可以增加磁盘大小的),再选择将虚拟机拆分为多个文件(会随着系统文件大小而增加,不会一开始就占用全部的磁盘大小)
-
最后点击完成即可
正式安装Centos7.6
为已经创建好的虚拟机设置内存、处理器、镜像、网络适配器
-
点击编辑虚拟机设置
-
修改虚拟机的内存,根据你的电脑实际配置修改
-
修改分配的处理器数量(可以通过查看任务管理器、找到资源监视器看到自己有多少个cpu,一个cpu有多少个内核),我这里相当于给了四分之一
-
选择CD/DVD,选择使用IOS镜像文件,选择已经下载好的Centos7.6
-
网络适配器一般选择NAT模式
安装信息摘要(软件选择、配置分区、KDUMP、网络、安全策略)
选择Install Centos7
选择Centos的安装语言(我这里选择中文)
软件选择(GNOME桌面,为了学习方便,实际开发选择最小安装)
- 这样将会包含JDK、GCC、MYSQL等
安装位置(配置分区)
-
/boot 引导分区,设置exp4文件格式,大小一般为1G
-
/swap 交换分区,设置swap文件格式,大小一般为linux内存大小(所以这里我这里选2G)
- 该分区的作用:当Linux的内存被占用满了时,有一个程序想要加载进内存运行,那么就会进入swap分区的内存来运行,当真正的内存有空间时,再放入Linux的真实内存。(相当于一个Linux内存不足的补充极致)
-
/ 根分区,设置exp4文件格式,剩下的硬盘空间20-3全部给根分区
操作步骤如下:
1. 点击安装位置
2. 点击我要配置分区
3. 点击左上角的完成
4. 添加挂载点
5. 再点击左上角的完成
6. 点击接受更改
KDUMP(记录Linux系统崩溃时的信息)
-
由于需要占用一些空间,而目前又是一个学习,因此这边就关闭了
-
生产环境中建议打开
网络和主机名
SECURITY POLICY 安全策略
说白了就是设置一些用户名账户密码时为您进行一些提示之类的,关闭即可。
点击开始安装后,设置root的密码,再新增个用户
等待安装完成即可
基础知识储备
虚拟机的3种网络连接方式
-
桥接模式
- 会与主机共用同一个网段的ip地址,例如主机ip地址为192.168.1.23,那么虚拟机的ip地址就可能是192.168.1.25,该虚拟机可以与同网段的任何计算机通信,例如使用ping的方式。(可能会造成ip冲突的情况,比如一个教室有200台电脑,每台电脑都装一个虚拟机,都使用桥接模式)
-
NAT模式(网络地址转换)
- 会在主机上创建一个网卡,与主机并不是同一个网段的地址。不会造成ip冲突。主机仍然可以直接ping通该虚拟机,但是外部其他的计算机无法ping通该虚拟机,虚拟机也可以直接ping通外部的主机及其他外部计算机。
-
主机模式(一台独立的主机,无法与外部计算机通信)
虚拟机的克隆(2种方式)
-
直接复制整个虚拟机的文件夹(使用时直接用虚拟机打开即可)
-
使用虚拟机的克隆功能
虚拟机的快照
-
相当于保存了当前虚拟机的状态,可以任意的切换到不同的快照。
-
使用场景:当要执行一些重要操作时无法保证Linux系统不会出现一些问题时(文件损坏、数据丢失等),可以使用快照功能。
VMtools(虚拟机与主机共享文件夹)
VMtools的安装
-
进入centos系统(使用root用户)
-
如果桌面上有一个Centos 7 x86_64 ,右键它点击弹出
-
点击虚拟机软件上的菜单:虚拟机 -> 安装VMware Tools(重新安装也可以点)
-
打开桌面中出现的这个VMware Tools
-
将其中的VMwareTools-10.3.10-13959562.tar.gz文件拷贝到 /opt目录下
-
在桌面右键 -> 打开终端,执行如下命令,完成文件的解压
cd /opt
tar -zxvf VMwareTools-10.3.10-13959562.tar.gz
- 进入已经解压好的目录vmware-tools-distrib,执行里面的vmware-install.pl安装文件
cd vmware-tools-distrib/
./vmware-install.pl
# 完成如上2个步骤后,一直按回车下一步
-
安装完毕,显示如下效果
-
注意Centos需要安装GCC(由于在安装时候我已经选择了一下默认的软件,其中包含了GCC,所以无需单独安装)
设置共享文件夹
-
在主机中任意目录下创建一个文件夹
-
打开虚拟机软件,选择指定的虚拟机,点击设置
-
点击选项 -> 共享文件夹 -> 总是启用 -> 添加刚刚创建的文件夹 -> 最后点击确定
-
Linux如果要找到该目录的话,在 /mnt/hgfs/目录下即可看到
Linux目录结构
-
Linux的一切软件、配置、硬件等设备都是以文件方式来表示的。
-
在linux的世界,一切皆为文件
-
Linux的目录是一个树状的结构,其根目录为: “/”
常见的目录结构
-
/bin(常用),存放Linux的常用命令
-
/sbin,其中的s为super,代表管理员所使用的命令
-
/home(常用),存放普通用户的主目录,普通用户登录后默认会进入其主目录
-
/root(常用),该目录为root用户的主目录
-
/lib,一些系统开机所需要使用的动态连接共享库,类似于Windows中的dll文件,几乎所有的应用程序都需要用到这些共享库
-
/lost+found,在Linux非法关机后,会生成一些文件存放在该路径(默认为隐藏目录)
-
/etc(常用),通常放一些配置文件,例如mysql的配置文件my.conf
-
/usr(常用),一般存放一些用户所安装的应用程序
-
/boot,存放Linux开机时所需的一些引导文件
-
/proc,是一个虚拟目录,是Linux内存的映射,可以获取一些系统信息
-
srv,service的缩写,存放一些Linux系统服务
-
/sys,系统内核有关的文件
-
/tmp,存放临时文件
-
/dev,存放与硬件有关的文件
-
/media,存放一些媒体有关的文件,例如插入的U盘、光驱等
-
/mnt,存放一些需要挂载的文件夹等
-
/opt,一般存放一些安装文件
-
/usr/local(常用),给主机额外安装软件的目录
-
/var(常用),一般存放一些不断扩充的文件,比如日志。
-
/selinux,security-enhanced-linux,是Linux的安全子系统,能控制程序只能访问特定文件
远程连接到Linux服务器
Xshell和XFtp获取的地址
获取Linux服务器的ip地址(ifconfig命令)
判断主机与Linux系统是否可以连通(ping命令)
看到类似如上的界面说明可以连通
使用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密码
-
启动系统,在开机界面中按e进入编辑界面
-
在编辑界面中,移动光标到以“Linux16”开头所在的行数,移动到行的最后输入:init=/bin/sh
-
按下Ctrl + x快捷键即可进入单用户模式
-
在光标闪烁的位置输入:mount -o remount,rw / 后按回车
-
在新的一行输入passwd按回车完成密码的修改
-
输入 touch /.autorelabel 按回车
-
输入 exec /sbin/init 按回车
-
等待开机即可。
文件目录类指令
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
-
使用示例
# 查看历史指令
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 [选项] 文件名或目录名 [模糊匹配的字符串]
- 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所查看到的文件信息
-
前面的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表达式的练习
- 在每天22点45分执行命令
45 22 * * *
- 每周1的17点0分执行命令
0 17 * * 1
- 每月1号和15号的凌晨5点0分执行命令
0 5 1,15 * *
- 每周一到周五的凌晨4点40分执行命令
40 4 * * 1-5
- 每天的凌晨4点,每隔十分钟执行一次命令
*/10 4 * * *
- 每月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
虚拟机中的Linux挂载一块硬盘
使用虚拟机软件为该Linux添加一块硬盘后重启Linux
为该硬盘进行分区(想分多个区就多用几次指令呗)
1. fdisk /dev/sdb
2. 输入n + 回车代表新增分区
3. 输入p + 回车代表新增主分区
4. 输入分区号,输入几就代表第几个区,1~4自行输入后按回车。我这输入1个
5. 输入w后按回车,代表写入并保存(如果不想保存,觉得搞错了,就输入q回车)
将该硬盘进行格式化
1. mkfs -t ext4 /dev/sdb1
将硬盘挂载到一个目录下,比如/newDisk
1. mkdir /newDisk
2. mount /dev/sdb1 /newDisk
设置/etc/fstab文件,使开机自动挂载
vim /etc/fstab
修改到如下图,再保存退出
卸载指令
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
- 确定虚拟机的网关及网段,(可以修改)
- 修改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
- 重启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"
设置环境变量(相当于全局变量,整个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 "你输入的参数不作为一个整体时:$@"
单行注释与多行注释
#!/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
for循环(2种方式)
- 使用$*
#!/bin/bash
for i in "$*"
do
echo "你输入的值有:$i"
done
- 使用$@
#!/bin/bash
for i in "$@"
do
echo "你输入的值有:$i"
done
- 使用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
read语句
参数:-t 指定输入时间,单位为秒,超时就停止等待
参数:-p 输入时的提示语句
#!/bin/bash
read -p "请输入一个数字:" NUM
echo "你输入的数字为:$NUM"
echo "=================================="
# 表示10秒不输入就停止等待
read -t 10 -p "请输入一个数字:" NUM2
echo "你输入的数字为:$NUM2"
自带函数basename 和 dirname
自定义函数、自带函数的使用
#!/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"
练习,写一个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 事件的具体信息
自定义日志
-
创建一个存储日志的文件
touch /var/log/codeStars.log
-
修改日志服务的配置文件
vim /etc/rsyslog.conf
在最后添加一行呗
-
重启下日志服务让配置生效
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 dump
和yum -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