0
点赞
收藏
分享

微信扫一扫

Linux操作系统学习笔记【入门必备】

腾讯优测 2022-03-20 阅读 86
linux

Linux操作系统学习笔记【入门必备】

文章目录

1.Linux入门

  • 概述

    • Linux是一个开源、免费的操作系统,其稳定性、安全性、处理多并发已经得到业界的认可,目前很多企业级的项目(c/c++/php/python/java/go)都会部署到Linux/Unix系统上。
    • 常见的操作系统(windows,IOS,Android,MacOS,Linux,Unix)
  • 应用领域

    • 服务器领域

    Linux在服务器领域的应用是最强的。

    Linux免费、稳定、高效等特点在这里得到了很好的体现,尤其在一些高端邻域尤其广泛(c/c++/php/python/java/go)

    • 嵌入式领域

    Linux运行稳定,对网络的良好支持性、低成本,且可以根据需要进行软件裁剪,内核最小可以达到几百KB等特点,使其近些年在嵌入式领域的应用得到非常大的提高。

2.Linux目录结构

  • 基本介绍

Linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“ / ”, 然后在此目录下在创建其他的目录。

  • 具体的目录结构

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.远程登录

3.1 远程登录Linux-Xshell5

  • 介绍

说明:Xshell是目前最好的远程登录到Linux操作的软件,流程的速度并且完美的解决了中文乱码的问题,是目前程序员首选的软件。

Xshell是一个强大的安全终端模拟软件,它支持SSH1,SSH2,以及Microsoft Windows 平台的TELNET协议。

Xshell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。

  • 下载-安装-配置和使用

下面介绍Xshell7和Xftp7的下载。

下载free-for-home-school版本

地址: https://www.xshell.com/zh/free-for-home-school/

进入下载页面,填写相关信息。
在这里插入图片描述

当出现这个界面,代表我们申请成功。此时我们可以到我们的邮箱查看下载链接。

在这里插入图片描述

进入我们的邮箱,可以看到我们已经成功收到下载链接

在这里插入图片描述

点击下载链接,网页自动跳转到下载页面自动下载。点击下载好的文件,接下来就是傻瓜式安装。

以下为xshell5和xftp5的配置和使用。

1.在Linux终端中输入 ifconfig 获取Linux公网指令

在这里插入图片描述

2.在Windows终端中ping 获取到的指令

在这里插入图片描述

3.ping成功后,双击xshell,新建会话,填写相关信息后点击确定

在这里插入图片描述

4.点击连接

在这里插入图片描述

5.选择是否保存密码

在这里插入图片描述

6.输入登录的用户名后点确定,在输入用户密码点确定

在这里插入图片描述

7.成功登录。

在这里插入图片描述

3.2 远程上传下载文件 Xftp-5

  • 介绍

是一个基于Windows平台的功能强大的SFTP、FTP文件传输软件。使用了Xftp以后,Windows用户能在安全地在UNIX/Linux和Windows PC之间传输文件。

  • 下载-安装-配置和使用

下载和安装在xshell5时已经完成。与xshell5不同的是Xftp5的协议改为SFTP。

在这里插入图片描述

注意:如果出现乱码,按下面的步骤即可解决。
1.选择【文件】里的【属性】一栏
在这里插入图片描述

2.勾上【使用UTF-8编码】
在这里插入图片描述

3.点击确定保存即可。

4.组管理和权限管理

4.1 文件/目录 所有者

  • 查看文件的所有者
ls -ahl
  • 修改文件所有者
chown 用户名 文件名

4.2 组的创建

  • 基本指令
groupadd 组名
  • 应用实例

创建一个组,monster

groupadd monster

创建一个用户 fox,并放入到 monster组中

useradd -g monster fox

4.3 文件/目录 所有组

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

  • 查看文件/目录所在组

    基本指令

ls -ahl

​ 应用实例

-rw-r--r--,1 fox monster 0 11月 5 12:50 ok.txt
  • 修改文件所在组

    基本指令

    chgrp 组名 文件名
    

    应用实例

    使用root用户创建文件 orange.txt,看看当前这个文件属于哪个组,然后将这个文件所在组fruit组。

    1.groupadd fruit
    2.touch orange.txt
    3.看看当前这个文件属于哪个组—> root组
    4.chgrp fruit orange.txt
    

4.4 其它组

除文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组。

4.5 改变用户的所在组

在添加用户时,可以指定将该用户添加到哪个组中,同样的用root的管理权限可以改变某个用户所在的组。

  • 改变用户所在组

    1. usermod -g 新组名 用户名
    2. usermod -d 目录名 用户名 改变该用户登录的初始目录。特别说明:用户需要由进入到新目录的权限。
    

4.6 权限的基本介绍

ls -l 中显示的内容如下:

-rwxrw-r-- 1 root 1213 Feb 2 09:39 abc

0~9位说明

  1. 第0位确定文件类型(d, -, l, c, b)

​ I 是链接,相当于Windows的快捷方式

d 是目录,相当于Windows的文件夹

c 是字符设备文件,鼠标,键盘

b 是块设备,比如硬盘

2.第1-3位确定所有者(该文件的所有者)拥有该文件的权限。—User

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

4.第7-9位确定其它用户拥有该文件的权限。—Other

4.7 rwx权限详解

  • rwx作用到文件

    • [r] 代表可读(read):可以读取,查看。
    • [W] 代表可写(write):可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件。
    • [ x ] 代表可执行(execute):可以被执行。
  • rwx作用到目录

    • [r] 代表可读(read):可以读取,ls 查看目录内容。
    • [W] 代表可写(write):可以修改,对目录内创建 + 删除 + 重命名目录
    • [ x ] 代表可执行(execute):可以进入该目录。

4.8 文件及目录权限实际案例

ls -l 中显示的内容如下:

-rwxrw-r-- 1 root 1213 Feb 2 09:39 abc
  • 10个字符确定不同用户能对文件干什么

第一个字符代表文件类型:-l d c b

其余字符每三个一组(rwx) 读® 写(w) 执行(x)

第一组rwx:文件拥有者的权限是读、写和执行。

第二组rw-: 与文件拥有者同一组的用户的权限是读、写但不能执行。

第三组r-- :不与文件拥有者同组的其他用户的权限是读不能写和执行

  • 可用数字表示为:r=4,w=2,x=1, 因此rwx=4+2+1=7
  • 其它说明
1文件:硬连接数或 目录:子目录数
root用户
root
1213文件大小(字节),如果是文件夹,显示4096字节
Feb 2 09:39最后修改日期
abc文件名

4.9 修改权限-chmod

  • 基本说明

通过chmod指令,可以修改文件或者目录的权限。

  • 第一种方式:+、-、=变更权限

u所有者 g:所有组 o:其他人 a:所有人(u,g,o的总和)

chmod u=rwx , g=rx, o=x  文件/目录名
chmod o+x  文件/目录名
chmod a-x  文件/目录名

案例演示

1)给abc文件的所有者读写执行的权限,给所在组读执行权限,给其它组读执行权限。

chmod u=rwx , g=rx, o=rx abc

2)给abc文件的所有者除去执行的权限,增加组写的权限。

chmod u-x , g+w abc

3)给abc文件的所有用户添加读的权限。

chmod a+r abc
  • 第二种方式:通过数字变更权限

    r=4 w=2 x=1 rwx=4+2+1=7

    chmod u=rwx,g=rx,o=x 文件目录名
    

    相当于 chmod 751 文件目录名

    案例演示

    要求:将 /home/abc.txt 文件的权限修改成 rwxr-xr-x,使用给数字的方式实现:

    chmod 755 /home/abc.txt 
    

4.10 修改文件所有者-chown

  • 基本介绍
chown newowner      文件/目录 改变所有者
chown newowner:newgroup	文件/目录 改变所有者和所在组

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

  • 案例演示

请将 /home/abc.txt 文件所有者修改成tom

chown tom /home/abc.txt

请将 /home/test 目录下所有的文件和目录的所有者都修改成tom

chown -R tom /home/test

4.11 修改文件/目录所在组-chgrp

  • 基本介绍
chgrp newgroup 文件/目录 【改变所在组】
  • 案例演示

请将 /home/abc.txt 文件的所有组修改成 shaolin(少林)

  groupadd shaolin
chgrp shaolin  /home/abc.txt 

请将 /home/test 目录下所有的文件和目录的所有组都修改成 shaolin(少林)

chgrp -R shaolin  /home/test

5.实用指令

5.1 指定运行级别

  • 基本介绍

    运行级别说明:

    0:关机

    1:单用户 【找回丢失密码】

    2:多用户状态没有网络服务

    3:多用户状态有网络服务

    4:系统未使用保留给用户

    5:图形界面

    6:系统重启

    常用运行级别是3和5,也可以指定默认运行级别。

5.2 找回root密码(CentOS7.6)

  • 首先,启动系统,进入开机界面,在界面中按 “e" 进入编译界面。
  • 进入编译界面,使用键盘上下键把光标往下移动,找到以 ” “Linux16” 开头内容所在的行数“ ,在最后面输入:init=/bin/sh
  • 输入完成后,直接按快捷键:Ctrl + x 进入单用户模式
  • 在光标闪烁的位置中输入:mount -o remount,rw / (注意:每个单词间有空格) ,完成后按键盘的回车键(Enter)
  • 在新的一行最后面输入:passwd,完成后按键盘的回车键(Enter)输入密码,然后再次确认密码即可),密码修改成功后,会显示passwd… …的样式,说明密码修改成功。
  • 在鼠标闪烁的位置中(最后一行中)输入:touch/.autorelabel(注意:touch与后面有一个空格),完成后按键盘的回车键(Enter)
  • 继续在光标闪烁的位置中,输入:exec /sbin/init (注意:exec与 / 后面有一个空格),完成后按键盘的回车键(Enter),等待系统自动修改密码(时间较长),完成后,系统会自动重启,新的密码生效了。

5.3 帮助指令

  • man 获取帮助信息

基本语法:

man [命令或配置文件] (功能描述:获取帮助信息)
  • help指令

基本语法:

help 命令(功能描述:获得shell内置命令的帮助信息)

5.4 文件目录类

  • pwd指令

基本语法:

pwd (功能描述:显示当前工作目录的绝对路径)
  • ls指令

基本语法:

ls  [选项] [目录或是文件]

常用选项:

-a : 显示当前目录所有的文件和目录,包括隐藏的。

-l : 以列表的方式显示信息。

  • cd指令

基本语法:

cd [参数] (功能描述:切换到指定目录)

理解:绝对路径和相对路径

cd ~ 或者cd : 回到自己的家目录,比如 你是root,cd ~ 到 /root

cd …回到当前目录的上一级目录

  • 应用案例

案例1:使用绝对路径切换到root目录

cd /root

案例2:使用相对路径到root目录,比如在 /home/tom

cd ../../root

案例3:表示回到当前目录的上一级目录

cd ..

案例4:回到家目录

cd ~
  • mkdir指令

mkdir指令用于创建目录

基本语法:

mkdir [选项] 要创建的目录

常用选项

-p:创建多级目录

应用实例

案例1:创建一个目录 /home/dog

mkdir /home/dog

案例2:创建多级目录 /home/animal/tiger

mkdir -p /home/animal/tiger
  • rmdir指令

rmdir指令删除空目录

基本语法:

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

使用细节:

rmdir 删除的是空目录,如果目录下有内容是无法删除。

提示:如果非要删除非空目录,需要使用 rm -rf 要删除的目录

应用实例

案例:删除一个目录 /home/dog

rmdir /home/dog
  • touch指令

touch指令创建空文件

基本语法:

touch 文件名称
  • cp指令

cp指令拷贝文件到指定目录

基本语法:

cp [选项] source dest

常用选项:

-r : 递归复制整个文件夹

使用细节:

强制覆盖不提示的方法:  \cp -r/home/bbb/op
  • rm指令

说明:rm指令移除文件或目录

基本语法:

rm [选项] 要删除的文件或目录

常用选项:

-r : 递归删除整个文件夹

-f :强制删除不提示

应用实例

案例1:将 /home/hello.txt 删除

rm /home/hello.txt

案例2:递归删除整个文件夹 /home/bbb

rm -rf /home/bbb [删除整个文件夹,不提示]

使用细节:

强制删除不提示的方法:带上 -f 参数即可

  • mv指令

mv移动文件与目录或重命名

基本语法:

mv oldNameFile newNameFile  (功能描述:重命名)
mv /temp/movefile/targetFolder (功能描述:移动文件)
  • cat指令

cat查看文件内容

基本语法

cat [选项] 要查看的文件

常用选项

-n :显示行号。

应用实例

案例1: /etc/profile 文件内容,并显示行号。

cat -n /etc/profile

使用细节:

cat 只能浏览文件,而不能修改文件,为了浏览方便,一般会带上 管道命令 | more

cat -n /etc/profile | more	[进行交互]
  • more指令

more指令是一个基于VI编译器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more指令中内置了若干个快捷键(交互的指令)详见操作说明:

基本语法:

more 要查看的文件

操作说明:

操作功能描述
空白键(space)代表向下翻一页
Enter代表向下翻【一行】
q代表立刻离开more,不再显示该文件内容
Ctrl + F向下滚动一屏
Ctrl + B返回上一屏
=输出当前行的行号
:f输出文件名和当前行的行号

应用实例

案例:采用more查看文件 /etc/profile

more /etc/profile
  • less指令

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

基本语法:

less 要查看的文件

操作说明:

操作功能说明
空白键向下翻动一页
[pagedown]向下翻动一页
[pageup]向上翻动一页
/字串向下搜索【字串】的功能;n:向下查找; N:向上查找
?字串向上搜索【字串】的功能;n:向上查找; N:向下查找
q离开less这个程序

应用实例

案例:采用less查看一个大文件文件/opt/杂文.txt

less /opt/杂文.txt
  • echo指令

echo输出内容到控制台

基本语法

echo [选项] [输出内容]
  • head指令

head用于显示文件的开头部分内容,默认情况下head指令显示文件的前10行内容。

基本语法:

head 文件		(功能描述:查看文件头10行内容)
head -n 5 文件 (功能描述:查看文件头5行内容,5可以是任意行数)
  • tail指令

tail用于输出文件中尾部的内容,默认情况下tail指令显示文件的前10行内容。

基本语法:

tail 文件		(功能描述:查看文件尾10行内容)
tail -n 5 文件 (功能描述:查看文件尾5行内容,5可以是任意行数)
tail -f 文件 (功能描述:实时追踪该文档的所有更新)
  • / > 指令 和 >>指令

/ > 输出重定向和 >>追加

基本语法:

ls -l >文件			(功能描述:列表的内容写入文件a.txt(覆盖写))
ls -al >>文件			(功能描述:列表的内容追加到文件aa.txt的末尾)
cat 文件1>文件2			(功能描述:将文件1的内容覆盖到文件2)
echo ”内容“>>文件(追加)
  • ln指令

软连接也称为符号链接,类似于windows了的快捷方式,主要存放了链接其它文件的路径。

基本语法:

ln -s [原文件或目录] [软链接名] (功能描述:给原文件创建一个软链接)

细节说明:

当我们使用pwd指令查看目录时,仍然看到的是软链接所在目录。

  • history指令

查看已经执行过历史命令,也可以执行历史命令

基本语法:

history (功能描述:查看已经执行过历史命令)

5.5 时间日期类

  • date指令-显示当前日期

基本语法:

date  (功能描述:显示当前时间)
date + %Y (功能描述:显示当前年份)
date + %m(功能描述:显示当前月份)
date + %d (功能描述:显示当前是哪一天)
date "+%Y-%m-%d %H:%M:%S" (功能描述:显示年月日时分秒)
  • date指令-设置日期

基本语法:

date -s 字符串时间
  • cal指令

查看日历指令

基本语法:

cal [选项] (功能描述:不加选项,显示本月日历)

5.6 搜索查找类

  • find指令

find指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端。

基本语法:

find [搜索范围] [选项]

选项说明:

选项功能
-name<查询方式>按照指定的文件名查找模式查找文件
-user<用户名>查找属于指定用户名所有文件
-size<文件大小>按照指定的文件大小查找文件

应用实例:

案例1:按文件名:根据名称查找 /home 目录下的hello.txt 文件

find /home -name hello.txt

案例2:按拥有者:查找 /opt目录下,用户名称为nobody.txt 的文件\

find /opt -user nobody

案例3:查找整个Linux系统下大于200M的文件(+n大于 -n小于 n等于,单位有k,M,G)

find / -size +200M
  • locate指令

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

基本语法:

locate 搜索文件

特别说明:

由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库。

  • grep指令和管道符号 |

grep 过滤查找,管道符,”|“ ,表示将前一个命令的处理结果。

基本语法:

grep [选项] 查找内容 源文件

常用选项:

选项功能
-n显示匹配行及行号
-i忽略字母大小写

5.7 压缩和解压类

  • gzip/gunzip 指令

gzip 用于压缩文件,gunzip 用于解压的

基本语法:

gzip 文件		(功能描述:压缩文件,只能将文件压缩为*.gz文件)
gunzip 文件.gz(功能描述:解压缩文件命令)
  • zip/unzip指令

zip 用于压缩文件,unzip 用于解压的,这个在项目打包发布中很有用的

基本语法:

zip   [选项] XXX.zip 将要压缩的内容(功能描述:压缩文件和目录的命令)
unzip [选项] XXX.zip (功能描述:解压缩文件)

zip常用选项:

-r : 递归压缩,即压缩目录

unzip常用选项:

-d <目录> : 指定解压后文件的存放目录

  • tar指令

tar指令是打包指令,最后打包的文件是 .tar.gz 的文件。

基本语法:

tar [选项] XXX.tar.gz 打包的内容 (功能描述:打包目录,压缩后的文件格式.tar.gz)

选项说明:

选项功能
-c产生.tar打包文件
-v显示详细信息
-f指定压缩后的文件名
-z打包同时压缩
-x解包.tar文件

6.用户管理

6.1 添加用户

  • 基本语法
useradd 用户名
  • 应用案例

案例:添加一个用户 milan

useradd milan
  • 细节说明

1.当创建用户成功后,会自动的创建和用户同名的家目录

2.也可以通过 useradd -d 指定目录 新的用户名,给新创建的用户指定家目录

6.2 指定/修改密码

  • 基本语法
passwd 用户名
  • 应用案例

案例:给milan 指定密码

passwd milan

补充,显示当前用户所在的目录 pwd

6.3 删除目录

  • 基本语法
userdel 用户名
  • 应用案例

1.删除用户milan, 但是要保留家目录

userdel milan

2.删除用户以及用户主目录,比如tom

userdel -r tom

6.4 查询用户信息指令

  • 基本语法
id 用户名
  • 应用案例

案例:请查询root信息

id root
  • 细节说明

当用户不存在时,返回无此用户。

6.5 切换用户

  • 介绍

在操作Linux中,如果当前用户的权限不够,可以通过 su - 指令,切换到高权限用户,比如root

  • 基本语法
su - 切换用户名
  • 应用案例

创建一个用户jack ,指定密码,然后切换到 jack

useradd jack
passwd jack
su - jack
  • 细节说明

1.从权限高的用户切换到权限低的用户,不需要输入密码,反之需要

2.当需要返回到原来用户时,使用exit/logout指令

6.6 查看当前用户/登录用户

基本语法:

whoami/who am I

6.7 用户组

  • 介绍

类似于角色,系统可以对有共性的多个用户进行统一的管理

  • 新增组
groupadd 组名
  • 删除组
groupdel 组名 
  • 增加用户时直接加上组
useradd -g 用户组 用户名

增加一个用户没有指定组,用户会到以用户名为组名的组。

  • 修改用户的组
usermod -g 用户组 用户名

6.8 用户和组相关文件

  • /etc/passwd 文件

用户(user)的配置文件,记录用户的各种信息

每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

注意:可以通过以下方式查看

vim /etc/passwd
  • /etc/shadow 文件

口令的配置文件

每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

  • /etc/group 文件

组(group)的配置文件,记录Linux包含的组的信息

每行含义:组名:口令:组标识号:组内用户列表

7.Vi和Vim编译器

7.1 基本介绍

Linux系统会内置vi文本编辑器

Vim具有程序编辑的能力,可以看做是Vi的增强版本,可以主动的一字体颜色辨别语法的正确性,方便程序设计。代码补完、编译及错误跳转转方面编程的功能特别丰富,在程序员中别广泛使用。

7.2 Vi和Vim常用的三种模式

  • 正常模式

以 vim 打开一个档案就直接进入一般模式了(这是默认模式)。在这个模式中,你可以使用【上下左右】按键来移动光标,你可以使用【删除字符】或【删除整行】来处理档案内容,也可以使用【复制、粘贴】来处理你的文件数据。

  • 插入模式

按下i , I , o , O , a , A , r , R 等任何一个字母之后才会进入编辑模式,一般来说按 i 即可。

  • 命令行模式

输入 esc 再输入 在这个模式当中,可以提供你相关指令,完成读取、存盘、替换、离开vim、显示行号等的动作则是再此模式中达成的。

文本输入完毕以后,先按 ESC,再输入 :wq

7.3 各种模式的相互切换

在这里插入图片描述

7.4 vi和vim快捷键

  • 快捷键使用练习
    • 拷贝当前行 yy,拷贝当前行向下的5行 5yy ,并粘贴。
    • 删除当前行 dd,删除当前行向下的5行 5dd
    • 在文件中查找某个单词【命令行下/关键字,回车,查找,输入n就是查找下一个】
    • 设置文件的行号,取消文件的行号【命令行下 : set nu 和 : set nonu】
    • 编译 /etc/profile 文件,使用快捷键到该文档的最末行【G】和最首行【gg】
    • 在一个文件中输入“hello”,然后又撤销这个动作 u
    • 编译 /etc/profile 文件,并将光标移动到 20行 shift+g

8.定时任务调度

8.1 crond任务调度

  • crontab 进行定时任务的设置

    • 概述

    任务调度:是指系统在某个时间执行的特定的命令或程序。

    任务调度分类:1.系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等

    ​ 2.个别用户工作:个别用户可能希望执行某些程序,比如对MySQL数据库的备份。

    • 基本语法
    crontab [选项]
    
    • 常用选项
    -e编译crontab定时任务
    -l查询crontab任务
    -r删除当前用户所有的crontab任务
    • 快速入门

    设置任务调度文件:/etc/crontab

    设置个人任务调度,执行crontab -e命令。

    接着输入任务到调度文件,如

    */1****ls -l /etc/ > /tmp/to.txt
    

    意思是说每小时的每分钟执行ls -l /etc/ > /tmp/to.txt命令。

    • 参数细节

    5个占位符

    项目含义范围
    第一个“*”一小时当中的第几分钟0~59
    第二个“*”一天当中的第几个小时0~23
    第三个“*”一个月当中的第几天1~31
    第四个“*”一年当中的第几号1~12
    第五个“*”一周当中的星期几0~7(0和7都代表星期日)
  • 特殊符号的说明

特殊符号含义
*代表任何时间。比如第一个“*”就代表一小时中每分钟都执行一次的意思
代表不连续的时间。比如“0 8,12,16 * * * 命令,就代表在每天的8点0分,12点0分,16点0分都执行一次命令
-代表连续的时间范围。比如” 0 5 * * 1-6命令“,代表在周一到周六的凌晨5点0分执行命令
*/n代表每隔多久执行一次。比如”*/10 * * * * 命令“,代表每隔10分钟就执行一遍命令
  • 特定时间执行任务案例
时间含义
45 22 * * * 命令在22点45分执行命令
0 17 * * 1命令每周1的17点0分执行命令
0 5 1,15 * * 命令每月1号和15号的凌晨5点0分执行命令
40 4 * * 1-5命令每周一到周五的凌晨4点40分执行命令
*/10 4 * * * *命令每天的凌晨4点,每隔1-分钟执行一次命令
0 0 1,15 * 1命令·每月1号和15号,每周1的0点0分都会执行命令。注意:星期几和几号最好不要同时出现,因为它们定义的是都是天,非常容易让管理员混乱。
  • 应用实例

案例1:每隔1分钟,就将当前的日期信息,追加到 /tmp/mydate 文件中

*/1 * * * * date >> /tmp/mydate

案例2:每隔1分钟,就将当前的日期和日历都追加到 /tmp/mycal 文件中

步骤:

(1)vim /home/my.sh 写入内容 date >> /home/mycal 和 cal >> /home/mycal

(2) 给my.sh 增加执行权限,chmod u+x /home/my.sh

(3) crontab -e 增加 */1 * * * * /home/my.sh

案例3:每天凌晨两点将mysql数据库testdb,备份到文件中。提示:指令为mysqldump -u root -p 密码 数据库 > /home/db.bak

步骤:

(1)crontab -e

(2) 0 2 * * * mysqldump -u root -proot testdb > /home/db.bak

  • crond相关指令
crontab -r : 终止任务调度
crontab -l : 列出当前有哪些任务调度
service crond restart [重启任务调度]

8.2 at定时任务

  • 基本介绍

    • at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行。

    • 默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。

    • at命令是一次性定时计划任务,执行完一个任务后不在执行此任务。

    • 在使用at命令的时候,一定要保证atd进程的启动,可以使用相关指令来查看。

      ps -ef | grep atd //可以检测atd是否在运行

  • at命令格式

    at [选项] [时间]

    Ctrl + D 结束at命令的输入

  • at命令选项

选项含义
-m当指定的任务被完成后,将给用户发送邮件,即使没有标志输出
-Iatq的别名
-datrm的别名
-v显示任务都将被执行的时间
-c打印任务的内容到标准输出
-V显示版本信息
-q<队列>使用指定的队列
-f<文件>从指定文件读入任务而不是从标准输入读入
-t<时间参数>以时间参数的形式提交要运行的任务
  • at时间定义
    • 接收在当天的hh:mm(小时:分钟)式时间指定,假如改时间已经过去,那么就放在第二天执行,例如:04:00;
    • 使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的词语来指定时间。
    • 采用12小时计时制,即在时间后面加上AM(上午)或pm(下午)来说明是上午还是下午。例如:12pm
    • 指定命令执行的具体日期,指定格式为month day(月 日)或 mm/dd/yy (月/日/年) 或 dd.mm.yy(日/月/年) ,指定日期必须跟在指定时间的后面。例如:04:00 2021-03-1
    • 使用相对计时法。指定格式为: now + count time-units , now 就是当前时间,time-unist是时间单位,这里能够是 minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,几天,几小时。例如:now + 5 minutes
    • 直接使用today(今天),tomorrow(明天)来指定完成命令的时间。

9.RPM和YUM

9.1 rpm包的管理

  • 介绍

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

  • rpm包的简单查询指令

查询已安装的rpm列表

 rpm -qa l grep xx

举例:看看当前系统,是否安装了firefox

 rpm -qa l grep firefox
  • rpm包名基本格式

一个rpm包名:firefox-60.2.2-1.el7.centos.x86_64

名称:firefox

版本号:60.2.2-1

适合操作系统:el7.centos.x86_64

表示centos7.x的64位系统

如果是i686、i386表示32位系统,noarch表示通用。

  • rpm包的其它查询指令
rpm -qa:查询所安装的所有rpm软件包
rpm -qa | more
rpm -qa | grep X[rpm -qa | grep firefox]

rpm -q 软件包名: 查询软件包是否安装

案例:

rpm -q firefox

rpm -qi 软件包名: 查询软件包信息

案例:

rpm -qi firefox

rpm -ql 软件包名: 查询软件包中的文件

rpm -ql firefox

rpm -qf 文件全路径名 查询文件所属的软件包

rpm -qf /etc/passwd
rpm -qf /root/install.log
  • 卸载rpm包

    • 基本语法
      rpm -e RPM包的名称  
    
    • 应用案例

    删除firefox 软件包

    rpm -e firefox
    
    • 细节讨论

    如果其它软件包依赖于您要卸载的软件包,卸载时则会产生错误信息。如:

    $ rpm -e foo
    removing these packages would break dependencies:foo is needed by bar-1.0-1
    

    如果我们就是要删除foo这个rpm包,可以增加参数 --nodeps,就可以强制删除,但是一般不推荐这样做,因为依赖于该软件包的程序可能无法运行。如:

    $ rpm -e --nodeps foo
    
  • 安装rpm包

    • 基本语法
      rpm -ivh RPM包全路径名称
    
    • 参数说明

    i=install 安装

    v=verbose 提示

    h=hash 进度条

9.2 yum

  • 介绍

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

  • yum的基本指令

    查询yum服务器是否有需要安装的软件

    yum list | grep xx软件列表
    

    安装指定的yum包

    yum install xxx 下载安装
    
  • yum应用实例

案例:请使用yum的方式来安装firefox

rpm -e firefox
yum list | grep firefox
yum install firefox

10.开机、重启和用户登录注销

10.1 关机&重启命令

  • 基本介绍
shutdown -h now立即进行关机
shutdown -h 11分钟后关机
shutdown -r now现在重新启动计算机
halt关机,作用和上面一样
reboot现在重新启动计算机
sync把内存的数据同步到磁盘
  • 注意细节
    • 不管是重启系统还是关闭系统,首先要运行sync命令,把内存中的数据写到磁盘中。
    • 目前的 shutdown/reboot/halt 等命令均已经在关机前进行了sync 。

10.2 用户登录和注销

  • 基本介绍

    • 登录时尽量少使用root账号登录,因为它是系统管理员,最大的权限,避免操作失误。可以利用普通用户登录,登录后再用“ su - 用户名” 命令来切换成系统管理员身份。
    • 在提示符下输入 logout 即可注销用户。
  • 使用细节

    • logout 注销指令在圆形运行级别无效,在 运行级别 3 下有效。

11.磁盘分区、挂载

11.1 Linux分区

  • 原理介绍

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

命令:

lsblk 或者 lsblk -f 
  • 硬盘说明
    • Linux硬盘分为IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘。
    • 对于IDE硬盘,驱动器标识符为 “ hdx~” , 其中 “ hd” 表明分区所在设备的类型,这里是指IDE硬盘。“ x ” 为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘) ," ~ "代表分区,前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。例,hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上第二个主分区或扩展分区。
    • 对于SCSI硬盘则标识为“ sdx~” ,SCSI硬盘是用 “ sd" 来表示分区所在的设备的类型的,其余则和IDE硬盘的表示方法一样。

11.2 挂载的经典案例

说明:通过增加一块硬盘为例来熟悉下磁盘的相关指令和深入理解磁盘分区、挂载、卸载的概念。

在这里插入图片描述

  • 如何增加一块硬盘

    • 步骤1

    在【虚拟机】菜单中,选择【设置】,然后设备列表里添加硬盘。然后一路【下一步】,中间只有选择磁盘大小的地方需要修改,至到完成。然后重启系统(才能识别)

    • 步骤2

    分区命令

      fdisk /dev/sdb
    

    开始对/sdb分区

    m显示命令列表
    p显示磁盘分区 同fdisk -l
    n新增分区
    d删除分区
    w写入并退出

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

    • 步骤3

    格式化磁盘

    分区命令:

    mkfs -t ext4 /dev/sdb1
    

    其中ext4是分区类型。

    • 步骤4

    挂载:将一个分区与一个目录练习起来。

    mount 设备名称 挂载目录
    

    例如:

    mount /dev/sdb1 /newdisk
    
    umount 设备名称 或者 挂载目录
    

    例如:

    umount /dev/sdb1 或者 umount /newdisk
    

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

    • 步骤5

    永久挂载:通过修改/etc/fstab实现挂载

    添加完成后 执行

    mount -a
    

    即可生效。

    vim /etc/fstab 拷贝UUID编号 /newdisk 00

11.3 磁盘情况查询

  • 查询系统整体磁盘使用情况

基本语法:

df -h
  • 查询指定目录的磁盘占用情况

基本语法:

du -h 

查询指定目录的磁盘占用情况,默认为当前目录

-s 指定目录占用大小汇总
-h 带计量单位
-a 含文件
--max-depth=1 子目录深度
-c 列出明细的同时,增加汇总值

案例:查询 /opt 目录的磁盘占用情况,深度为1

du -hac --max-depth=1 /opt

11.4 磁盘情况——工作实用指令

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

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

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

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

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

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

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

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

5.以树状显示目录结构 tree 目录,注意,如果没有tree,则使用 yum install tree 安装

12.网络配置

12.1 查看网络IP和网关

  • 查看Windows环境中的VMnet8网络配置(ipconfig指令)
  • 查看Linux的网络配置 ifconfig

12.2 ping 测试主机之间网络连通性

  • 基本语法
ping 目的主机 (功能描述:测试当前服务器是否可以连接目的主机)

12.3 Linux网络环境配置

  • 第一种方法(自动获取)

说明:登录后,通过界面的来设置自动获取iP,特点:Linux启动后会自动获取IP,缺点是每次自动获取的IP地址可能不一样。

  • 第二种方法(指定IP)

    • 说明:直接修改配置文件来指定IP,并可以连接到外网

      编辑

      vim  /etc/sysconfig/network-scripts/ifcfg-ens33
      

      要求:将IP地址配置的静态的,比如:IP地址为192.168.200.130

      在这里插入图片描述

    • ifcfg-ens33文件说明:

    在这里插入图片描述

    • 重启网络服务或者重启系统生效

      service network restart、reboot
      

12.4 设置主机名和hosts映射

  • 设置主机名

    • 为了方便记忆,可以给Linux系统设置主机名,也可以根据需要修改主机名。

    • 指令

    hostname:查看主机名
    
    • 修改文件在etc/hostname指定
    vim etc/hostname
    
    • 修改后,重启生效
  • 设置hosts映射

    如何通过主机名能够找到(比如ping)某个Linux系统

    • windows

    在C:\Windows\System32\drivers\etc\hosts 文件指定即可

    案例:192.168.200.130 hspedu100

    通过C:\Windows\System32\drivers\etc\hosts找到hosts文件,加上

    192.168.200.130 hspedu100 然后保存。

    • Linux

    在/etc/hosts 文件指定

    案例:192.168.200.1 ThinkPad-PC

    vim /etc/hosts
    

    然后加上 192.168.200.1 ThinkPad-PC

12.5 主机名解析过程分析

  • Hosts是什么

一个文本文件,用来记录IP和Hostname(主机名)的映射关系。

  • DNS

    • DNS,域名系统
    • 是互联网上作为域名和IP地址相互映射的一个分布式数据库
  • 案例:用户在浏览器输入了www.baidu.com

    • 浏览器先检查浏览器缓存中有没有改域名解析IP地址,有就先调用这个IP完成解析;如果没有就检查DNS解析器缓存,如果有直接返回IP完成解析。这两个缓存,就可以理解为 本地解析器缓存。
    • 一般来说,当电脑第一次成功访问某一网站后,在一定时间内,浏览器或操作系统会缓存他的IP地址(DNS解析记录),如在cmd窗口中输入
    ipconfig/displaydns //DNS域名解析缓存
    ipconfig/flushdns //手动清理DNS缓存
    
    • 如果本地解析器缓存没有找到对应映射,检查系统中hosts文件中有没有配置对应的域名IP映射,如果有,则完成解析并返回。
    • 如果 本地DNS解析缓存 和 hosts文件 中均没有找到对应的IP。则到域名服务DNS进行解析域。

13.进程管理

13.1 基本介绍

  • 在Linux中,每个执行的程序都称为一个进程。每一个进程都分配一个ID号(pid,进程号)。
  • 每个进程都可能以两种方式存在的。前台与后台,所谓的前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到进程,通常使用后台方式才执行。
  • 一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,直到关机才结束。

13.2 显示系统执行的进程

  • 基本介绍

ps命令是用来查看目前系统中,有哪些正在执行,以及它们执行的情况。可以不加任何参数。

ps显示的信息选项:

字段说明
PID进程识别号
TTY终端机号
TIME此进程所消CPU时间
CMD正在执行的命令或进程名
ps -a: 显示当前终端的所有进程信息
ps -u: 以用户的格式显示进程信息
ps -x:显示后台进程运行的参数
  • ps详解

    • 指令
    ps -aux | grep xxx
    
    • 指令说明
    USER用户名称
    PID进程号
    %CPU进程占用CPU的百分比
    %MEM进程占用物理内存的百分比
    VSZ进程占用虚拟内存的百分比(单位:KB)
    RSS进程占用物理内存的百分比(单位:KB)
    TT终端名称,缩写
    STAT进程状态,其中S-睡眠,s-表示该进程是会话的先导进程,N-表示jin进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等
    STARTED进程的启动时间
    TIMECPU时间,即进程使用CPU的总时间
    COMMAND启动进程所用的命令和参数,如果过长会被截断显示
  • 应用实例

要求:以全格式显示当前所有的进程,查看进程的父进程。

ps -ef 是以全格式显示当前所有的进程

-e 显示所有的进程

-f 全格式

ps -ef | grep xxx
UID用户ID
PID进程ID
PPID父进程ID
CCPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表面进程是I/O密集型运算,执行优先级会提高
STIME进程启动的时间
TTY完整的终端名称
TIMECPU时间
CMD启动进程所用命令和参数

13.3 终止进程kill和killer

  • 介绍

若是某个进程执行一半需要停止时,或是已消耗了很大的系统资源时,此时可以考虑停止该进程。使用kill命令来完成此项任务。

  • 基本语法
kill [选项] 进程号 (功能描述:通过进程号杀死进程)
killall  进程名称 (功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)
  • 采用选项

-9:表示强迫进程立即停止

  • 最佳实践

案例1:踢掉某个非法登录用户

kill 进程号,比如 kill 11421

案例2:终止远程登录服务sshd,在适当时候在次重启sshd服务

kill sshd对应的进程号  /bin/systemctl start sshd.service

案例3:终止多个gedit,演示killall gedit

killall gedit

案例4:强制杀掉一个终端,指令

kill -9 bash 对应的进程号

13.4 查看进程树pstree

  • 基本语法
pstree [选项] ,可以更加直观的来看进程信息
  • 常用选项

-p : 显示进程的PID

-u : 显示进程的所属用户

  • 应用实例

案例1:请你以树状的形式显示进程的pid

pstree -p

案例2:请你以树状的形式显示进程的用户

pstree -u

13.5 服务管理

  • 介绍

服务本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysqld, sshd 防火墙等),因此我们又称为守护进程,是Linux中非常重要的知识点。

  • service管理指令

    • service 服务名 [start | stop | restart | reload | status]
    • 在CentOS7.0后 很多服务器不再使用service,而是 systemctl
    • service 指令管理的服务在 /etc/init.d 查看
  • service管理指令案例

请使用service指令,查看,关闭,启动network【注意:在虚拟系统演示,因为网络连接会关闭】

  • 查看服务名

    • 方式1:使用setup - > 系统服务 就可以看到全部,setup
    • 方式2: /ect/init.d 看到 service 指令管理的服务 ls -l/etc/init.d
  • 服务的运行级别(runlever)

    在这里插入图片描述

  • CentOS7后运行级别说明

在 /etc/initab 进行简化,如下

multi-user.target:analogous to runlever 3
graphical.target:analogous to runlever 5
#To view current default target,run:
systemctl get-default
#To set a default target,run:
systemctl set-default TARGET.target

在这里插入图片描述

  • chkconfig指令

    • 介绍

      • 通过chkconfig命令可以给服务器的各个运行级别设置自 启动/关闭
      • chkconfig指令管理的服务在 /etc/init.d查看
      • 注意:在CentOS7.0后 很多服务器使用systemctl 管理
    • chkconfig基本语法

      • 查看服务
       chkconfig --list [| grep xxx]
      

      在这里插入图片描述

      chkconfig 服务名 --list
      chkconfig --lever 5 服务名 on/off
      
    • 案例:对network服务 进行各种操作,把network 在3的运行级别,关闭自启动

    chkconfig --lever 3 network off
    chkconfig --lever 3 network on
    
    • 使用细节

    chkconfig重新设置服务后自启动或关闭,需要重启机器reboot生效

  • systemctl管理指令

    • 基本语法:
    systemctl  [start | stop | restart | status] 服务名
    
    • systemct指令管理的服务在 /user/lib/systemd/system 查看
  • systemctl设置服务的自启动状态

systemct list-unit-files [| grep 服务名] (查看服务开机启动状态,grep可以进行过滤)
systemct enable 服务名(设置服务开机启动)
systemct disable 服务名(关闭服务开机启动)
systemct is-enable 服务名(查询某个服务器是否是自启动的)
  • 案例

查看当前防火墙的状况,关闭防火墙和重启防火墙。

ls -l  /user/lib/systemd/system | grep fire =>firewalld.service
systemct status firewalld
systemct stop firewalld
systemct start firewalld
  • 细节讨论

    • 关闭或者启动防火墙后,立即生效【telnet 测试 某个端口即可】
    • 这种方式只是临时生效,当重启系统后,还是回归以前对服务的设置。
    • 如果希望设置某个服务自启动或关闭永久生效,要使用 systemct [enable|disable] 服务名
  • 打开或者关闭指定端口

  • firewall指令

打开端口: firewall-cmd --permanent --add-port=端口号/协议
关闭端口: firewall-cmd --permanent --remove-port=端口号/协议
重新载入,才能生效: firewall-cmd --reload
查询端口是否开发: firewall-cmd --query-port=端口号/协议

13.6 动态监控进程

  • 介绍

top 与 ps 命令很相似,它们都用来显示执行的进程。top 与 ps 最大的不同之处,在于top在执行一段时间可以更新正在运行的进程。

  • 基本语法
top [选项]
  • 选项说明:
选项功能
-d 秒数指定top命令每隔几秒更新。默认是3秒
-i使top不显示任何闲置或者僵死进程
-p通过指定监控进程ID来仅仅监控某个进程的状态
  • 交互操作说明
操作功能
P以CPU使用率排序,默认是此项
M以内存的使用率排序
N以PID排序
q退出top
  • 案例

案例1:监视特定用户,比如我们监视tom用户

top: 输入此命令,按回车键,查看执行的进程。

u:然后输入“ u” 回车,在输入用户名,即可。

案例2:终止指定的进程,比如我们要结束tom登录

top : 输入此命令,按回车键,查看执行的进程。

k:然后输入“ k " 回车,在输入要结束的进程ID号

13.7 监控网络状态

  • 查看系统网络情况netstat

    • 基本语法
    netstat [选项]
    
    • 选项说明

    -an 按一定顺序排列输出

    -p 显示哪个进程在调用

    • 应用案例

    请查看服务名为 sshd 的服务的信息

    netstat -anp | grep sshd
    
  • 检测主机连接命令ping:

是一种网络检测工具,它主要是用来检测远程主机是否正常,或是两部主机间的网线或网卡故障。

如:ping 对方IP地址

14.日志管理

14.1 基本介绍

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

/var/log/ 目录就是系统日志文件的保留位置。

14.2 系统常用的日志

在这里插入图片描述

14.3 日志管理服务 rsyslogd

CentOS7.6 日志服务是rsyslogd,CentOS6 .x 日志服务是 rsyslogd。 rsyslogd功能更加强大。

rsyslogd的使用、日志文件的格式,和 rsyslogd服务兼容的。

查询Linux中的 rsyslogd服务是否启动

ps aux | grep "rsyslogd" | grep -v "grep"

查询 rsyslogd服务的自启动状态

systemctl list-unit-files | grep rsyslog

配置文件:/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##自定义的日志设备

2.日志级别分为:

debug##有调试信息的,日志通信最多
info##一般信息日志,最常用
notice##最具有重要性的普通条件的信息
warning##警告级别
err##错误级别,阻止某个功能或者模块不能正常工作的信息
crit##严重级别,阻止整个系统或者整个软件不能正常工作的信息
alert##需要立刻修改的信息
emerg##内核崩溃等重要信息
none##什么都不记录

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

事件产生的时间

产生事件的服务器的主机名

产生事件的服务名或程序名

事件的具体信息

14.4 日志轮替

  • 基本介绍

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

  • 日志轮替文件命名

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

/etc/logrotate.conf为logrotate的全局配置文件

# rotate log files weekly,每周对日志文件进行一次轮替
weekly
# keep 4 weeks worth of backlogs,共保存4份日志文件,当建立新的日志文件时,旧的将会别删除
rotate 4
# create new (empty) log files after rotating old ones,创建新的空的日志文件,在日志轮替后
create
# use date as a suffix of the rotated file,使用日期作为日志轮替文件的后缀
dateext
# uncomment this if you want your log files compressed,日志文件是否压缩,如果取消注释,则日志会在转储的同时进行压缩
# compress
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
#包含 /etc/logrotate.d/ 目录中所有的子配置文件,也就是说会把这个目录中所有的子配置文件读取进来。
#下面是单独设置,优先级更高
# no packages own wtmp and btmp --we'll rotate them here
/var/log/wtmp {
	monthly #每月对日志文件进行一次轮替
	create 0664 root utmp #建立的新日志文件,权限是0664,所有者是root,所属是utmp组
	minsize 1M #日志文件最小轮替大小是1MB,也就是日志一定要超过1MB才会轮替,否则就算时间达到1个月,也不进行日志轮替
	rotate 1 #仅保留一个日志备份,也就是只有wtmp和wtmp.1日志保留而已
}
/var/log/btmp {
	missingok #如果日志不存在,则忽略该日志的警告信息
	monthly
	create 0600 root utmp
	rotate 1 
}

参数说明

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

    • 第一种方法是直接在/etc/logrotate.conf配置文件中写入该日志的轮替策略
    • 第二种方法是在/etc/logrotate.d/目录中新建立该日志的轮替文件,在该轮替文件中写入正确的轮替策略,因为该目录中的文件都会被“include"到主配置文件中,所以也可以把日志文件加入轮替。
    • 推荐使用第二种方法,因为系统中需要轮替的日志非常多,如果全部写入 /etc/logrotate.conf配置文件,那么这个文件的可管理性就会非常差,不利于此文件的维护。
  • 日志轮替机制原理

日志轮替之所以可以在指定的时间备份日志,是依赖系统定时任务。在 /etc/cron.daily/目录,就会发现这个目录中是有 logrotate文件(可执行),logrotate 通过这个文件依赖定时任务执行的。

14.5 查看内存日志

常用指令

journalctl ##查看全部
journalctl  -n 3 ##查看最新3条
journalctl  --since 19:00 --until 19:10:10 ##查看起始时间到结束时间的日志可加日期
journalctl  -p err ##报错日志
journalctl  -o verbose ##日志详细内容
journalctl  PID=1245 _COMM=sshd ##查看包含这些参数的日志(在详细日志查看)
或者 journalctl | grep sshd 

注意:journalctl 查看的是内存日志,重启清空。

15.Linux备份和恢复

15.1 基本介绍

Linux的备份和恢复很简单,有两种方式:

1.把需要的文件(或者分区)用TAR打包就行,下次需要恢复的时候,在解压开覆盖即可。

2.使用dump和restore命令。

15.2 安装dump和restore

如果Linux上没有dump和restore指令,需要先按照

yum -y install dump
yum -y install restore

15.3 使用dump完成备份

  • 基本介绍

    dump支持分卷和增量备份(所谓增量备份是指备份上次备份后 修改/增加过的文件,也称差异备份)。

  • dump语法说明

dump [-cu] [-0123456789] [-f<备份后文件名>] [-T<日期>] [目录或文件系统]
dump []-wW
-c创建新的归档文件,并将有一个或多个文件参数所指定的内容写入归档文件的开头
-0123456789备份的层级。0为最完整备份,会备份所有文件。若指定0以上的层级,则备份至上一次备份依赖修改或新增的文件,到9后,可以再次轮替
-f<备份后文件名>指定备份后文件名
-j调用 bzlib 库压缩备份文件,也就是将备份后的文件压缩成 bz2格式,让文件更小
-T<日期>指定开始备份的时间与日期
-u备份完成后,在/etc/dumpdares中记录备份的文件系统,层级,日期与时间等
-t指定文件名,若该文件已存在备份文件中,则列出名称
-W显示需要备份的文件及最后一次备份的层级,时间,日期
-w与-W类似,仅仅显示需要备份的文件
  • dump应用案例1

将/boot分区所有的内容备份到/opt/boot.bak0.bz2文件中,备份层级为”0“

dump -0uj -f /opt/boot.bak0.bz2 /boot
  • dump应用案例2

在/boot目录下增加新文件,备份层级为”1“(只备份上次使用层次”0“备份后发生过改变的数据),注意比较看看这次生成的备份文件 boot1.bak有多大

dump -1uj -f /opt/boot.bak1.bz2 /boot

通过dump命令在配合crontab可以实现无人值守备份

  • dump -W

显示需要备份的文件及其最后一次备份的层级,事件,日期。

  • 查看备份时间文件
cat /etc/dumpdates
  • dump备份文件或目录

前面我们在备份分区时,是可以支持增量备份的,如果备份文件或者目录,不在支持增量备份,即只能用0级别备份。

案例,使用dump备份 /etc 整个目录

dump -0j -f /opt/etc.bak.bz2 /etc/

#下面这条语句会报错,提示 DUMP:Only lever 0 dumps are allowed on a subdirectory

 dump -1j -f /opt/etc.bak.bz2 /etc/

15.4 使用restore完成恢复

  • 基本介绍

restore 命令用来恢复已备份的文件,可以从dump生成的备份文件中恢复原文件。

  • restore基本语法
restore [模式选项][选项]

说明下面四个模式,不能混用。在一次命令中,只能指定一种。

-C使用对比模式,不能混用,在一次命令中,只能指定一种
-i使用交互模式,将备份的文件与已存在的文件相互对比
-r进行还原模式
-t查看模式,看备份文件有哪些文件

选项:

-f <备份设备> : 从指定的文件中读取备份数据,进行还原操作。

  • 应用案例

案例1:restore 命令查看模式,看备份文件有哪些数据/文件

测试

restore -t -f boot.bak0.bz2

案例2:restore 命令还原模式,注意细节:如果你有增量备份,需要把增量备份文件也进行恢复,有几个增量备份文件,就要恢复几个,按顺序来恢复即可。

测试

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

案例3:restore 命令恢复备份文件,或者整个目录的文件

基本语法:

restore -r -f 备份好的文件

测试

mkdir etctmp
cd etctmp
restore -r -f /opt/etc.bak0.b2

16.Linux可视化管理webmin和bt运维工具

16.1 webmin

  • 基本介绍

webmin是功能强大的基于Web的Unix/Linux系统管理工具。管理员通过浏览器访问webmin的各种管理功能并完成相应的管理操作。除了个版本的Linux以外还可用于:AIX、HPUX、Solaris、Unixware 、Irix和FreeBSD等系统。

  • 安装webmin&配置

下载地址: http://download.webmin.com/download/yum/ ,用下载工具下载即可,也可以使用

wget http://download.webmin.com/download/yum/webmin-1.700-1.noarch.rpm

  • 安装:
  rpm -ivh webmin-1.700-1.noarch.rpm
  • 重置密码
  /usr/libexec/webmin/changepass.pl/etc/webmin root test

root是webmin的用户名,不是OS的,这里就是把 webmin 的 root 用户密码改成了 test

  • 修改webmin服务的端口号(默认是10000 出于安全目的)

将port=10000修改为其它端口号,如port=6666

  • 重启webmin
/etc/webmin/restart #重启
  /etc/webmin/start #启动
  /etc/webmin/stop #停止
  • 防火墙开放6666端口
 firewall-cmd --zone=public --add-port=6666/tcp --permanent #配置防火墙开放6666端口
  firewall-cmd --reload #更新防火墙配置
  firewall-cmd --zone=public --list-ports #查看已经开发的端口号
  • 登录webmin

    http://ip:6666 可以访问了

    用root账号和重置的新密码test

    • 简单使用演示

      比如修改 语言设置,IP访问控制,查看进程,修改密码,任务调度,MySQL等

16.2 bt(宝塔)

  • 基本介绍

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

  • 安装和使用

    • 安装:

    yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh

    • 安装成功后控制台会显示登录地址,账号密码,复制浏览器打开登录。

    • 使用介绍,比如可以登录终端,配置,快捷安装运行环境和系统工具,添加计划任务脚本

    • 如果bt的用户名,密码忘记了,使用bt default 可以查看

17.Linux——Shell编程

17.1 Shell是什么

Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。

17.2 Shell脚本的执行方式

  • 脚本格式要求

    • 脚本以 #!/bin/bash 开头
    • 脚本需要有可执行权限
  • 编写第一个Shell脚本

需求说明:创建一个Shell脚本,输出 hello world!

#!/bin/bash
echo "hello,world"
# mkdir /root/shcode
# cd /root/shcode/
# vim hello.sh
# chmod u+x hello.sh
# ./hello.sh

绝对路径

/root/shcode/hello.sh
  • 脚本的常用执行方式

    • 方式1(输入脚本的绝对路径或相对路径)

    说明:首先要赋予helloworld.sh 脚本的 + x 权限,再执行脚本

    • 方式2(sh + 脚本)

    说明:不用赋予脚本的 + x 权限,直接执行即可

    sh hello.sh
    

17.3 Shell的变量

  • Shell变量介绍

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

    • 系统变量: $ HOME 、$ PWD 、$USER等等。

    • 显示当前shell中所有变量:set

  • Shell变量的定义

    • 基本语法

      • 定义变量:变量=值
      • 撤销变量:unset 变量
      • 声明静态变量:readonly变量,注意:不能unset
    • 快速入门

    案例1:定义变量A

    #定义变量A
    A=100
    #输出变量需要加上$
    echo A=$A
    echo "A=$A"
    

    案例2:撤销变量A

    #撤销变量A
    unset A
    echo "A=$A"
    

​ 案例3:声明静态的变量B=2,不能unset

 readonly B=2
 echo "B=$B"
  • 定义变量的规则

    • 变量名可以由字母,数字和下划线组成,但是不能以数字开头,5A=200(X)
    • 等号两侧不能有空格
    • 变量名称一般习惯为大写
  • 将命令的返回值赋给变量

    • A=‘date’ 反引号,运行里面的命令,并把结果返回给变量A
    • A=$(date) 等价于反引号

17.4 设置环境变量

  • 基本语法
export 变量名=变量值	(功能描述:将shell变量输出为环境变量/全局变量)
source 配置文件	(功能描述:让修改后的配置信息立即生效)
echo $变量名	(功能描述:查询环境变量的值)

shell脚本的多行注释

:<<! 内容!

17.5 位置参数变量

  • 介绍

当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量

比如: ./myshell.sh 100 200,这个就是一个执行shell的命令行,可以在myshell 脚本中获取到参数信息

  • 基本语法
$n (功能描述:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10})
$* (功能描述: 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
$@ (功能描述: 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
$# (功能描述: 这个变量代表命令行中所有的参数的个数)
  • 位置参数变量

案例:编写一个shell脚本 myshell.sh,在脚本中获取到命令行的各个参数信息。

#!/bin/bash
echo "0=$0 1=$1 2=$2"
echo "所有的参数=$*"
echo "$@"
echo "参数的个数=$#"
# vim myshell.sh
# chmod u+x myshell.sh
# ./myshell.sh 100 200
0=./myshell.sh 1=100 2=200
所有的参数=100 200
100 200
参数的个数=2

17.6 预定义变量

  • 基本介绍

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

  • 基本语法

$$ (功能描述:当前进程的进程号(PID))
$! (功能描述:后台运行的最后一个进程的进程号(PID))
$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
  • 应用实例

案例:在一个shell脚本中简单实用一下预定义变量 preVar.sh

#!/bin/bash
echo "当前执行的进程id=$$"
#以后台的方式运行一个脚本,并获取他的进程号
/root/shcode/myshell.sh &
echo "最后一个后台方式运行的进程id=$!"
echo "执行的结果是=$?"
# vim preVar.sh
# chmod u+x preVar.sh
# ll
# ./preVar.sh

在这里插入图片描述

17.7 运算符

  • 基本介绍

学习如何在shell中进行各种运算操作。

  • 基本语法
1. "$((运算符))" 或 "$[运算式]" 或者 expr m + n //expression表达式
2.注意expr运算符间要有空格,如果希望将expr的结果赋予某个变量,使用”
3.expr m - n
4.expr \* , /,% 乘,除,取余
  • 应用实例

案例1:计算(2+3)X4 的值

案例2:请求出命令行的两个参数[整数]的和

# vim oper.sh
# ./oper.sh 20 50
#!/bin/bash
#案例1:计算(2+3)X4 的值
#使用第一种方式
RES1=$(((2+3)*4))
echo "res1=$RES1"
#使用第二种方式 推荐使用
RES2=$[(2+3)*4]
echo "res2=$RES2"
#使用第三种方式 expr
TEMP=`expr 2 + 3`
RES4=`expr $TEMP \* 4`
echo "temp=$TEMP"
echo "res4=$RES4"
#案例2:请求出命令行的两个参数[整数]的和 20 50
SUM=$[$1+$2]
echo "sum=$SUM"

17.8 条件判断

  • 判断语句

    • 基本语法
    [ condition ] (注意condition前后要有空格)
    #非空时返回true,可使用$?验证 (0为true,>1为false)
    
    • 常用判断条件

      • = 字符串比较
      • 两个整数比较

      -lt 小于

      -le 小于大于

      -eq 等于

      -gt 大于

      -ge 大于等于

      -ne 不等于

      • 按照文件权限进行判断

      -r 有读的权限

      -w 有写的权限

      -x 有执行的权限

      • 按照文件类型进行判断

      -f 文件存在并且是一个常规的文件

      -e 文件存在

      -d 文件存在并是一个目录

17.9 流程控制

17.9.1 if 判断
  • 基本语法
if [条件判断式]
then
代码

或者

if [条件判断式]
then
代码
elif [条件判断式]
then
代码
fi

注意事项:[条件判断式],中括号和条件判断式之间必须有空格

  • 应用案例 ifCase.sh

案例:请编写一个shell程序,如果输入的参数,大于等于60,则输出”及格了“,如果小于60,则输出”不及格“

if [ $1 -ge 60 ]
then
	echo "及格了"
elif [ $1 -lt 60 ]
then 
	echo "不及格"
fi
# vim ifCase.sh
# chmod u+x ifCase.sh
# ./ifCase.sh 70
及格了
17.9.2 case 语句
  • 基本语法
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
case $变量名 in
"值2")
如果变量的值等于值2,则执行程序2
;;
...省略其它分支...
*)
如果变量的值不是以上的值,则执行此程序
;;
esac
  • 应用案例

案例1:当命令行参数是1时,输出”周一“,是2时,输出”周二“,其它情况输出”other“

case $1 in
"1")
echo "周一"
;;
case $1 in
"1")
echo "周二"
;;
*)
echo "other..."
esac
17.9.3 for循环
  • 基本语法1
for 变量 in 值1 值2 值3...
do
程序
done
  • 应用实例testFor1.sh

案例1:打印命令行输入的参数

#注意 $* 是把输入的参数,当成一个整体,所以,只会输出一句
for i in "$*"
do
	echo "num is $i"
done
# vim testFor1.sh
# chmod u+x testFor1.sh
# ./testFor1.sh 100 200 300

输出

num is 100 200 300
#使用 $@ 来获取输入的参数,这时是分别对待,有几个参数就会输出几句
for j in "$@"
do
	echo "num is $j"
done

输出

num is 100
num is 200
num is 300
  • 基本语法2
for ((初始值;循环控制条件;变量变化))
do
程序
done
  • 应用实例testFor2.sh

案例1:从1加到100的值输出显示。

#定义一个变量 SUM
SUM=0
for(( i=1; i<=100; i++))
do
#这里写上你的业务代码
	SUM=$[$SUM+$i]
done
echo "总和SUM=$SUM"

SUM=0
for(( i=1; i<=$1; i++))
do
#这里写上你的业务代码
	SUM=$[$SUM+$i]
done
echo "总和SUM=$SUM"
17.9.4 while循环
  • 基本语法
while[条件判断式]
do
查询
done

注意:while 和 [有空格,条件判断式和 [也有空格

  • 案例:从命令行输入一个数n,统计从1+…+n的值是多少
#!/bin/bash
SUM=0
i=0
while [ $i -le $1 ]
do
	SUM=$[$SUM+$i]
	#i自增
	i=$[$i+1]
done 
echo "执行的结果=$SUM"

17.10 read读取控制台输入

  • 基本语法
read (选项)(参数)

选项:

-p : 指定读取值时的提示符;

-t : 指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了。

参数:

变量:指定读取值的变量名

  • 应用实例

案例1:读取控制台输入一个NUM1值。

案例2:读取控制台输入一个NUM2值,在10秒内输入。

#!/bin/bash
#案例1:读取控制台输入一个NUM1值
read p "请输入一个数NUM1=" NUM1
echo "你输入的NUM1=$NUM1"
#案例2:读取控制台输入一个NUM2值,在10秒内输入
read -t 10 -p "请输入一个数NUM2=" NUM2
echo "你输入的NUM2=$NUM2"

17.11 函数

  • 函数介绍

    shell编程和其它编程语言一样,有系统函数,也可以自定义函数。系统函数中,我们这里就介绍两个。

  • 系统函数

    • basename基本语法

    功能:返回完整路径最后/的部分,常用于获取文件名

    basename [pathname] [suffix]
    basename [string] [suffix] (功能描述:basename命令会删除所有的前缀包括最后一个('/')字符,然后将字符串显示出来。
    

    选项:

    suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。

    • 应用实例

    案例1:请返回 /home/aaa/test.txt 的”test.txt"部分

    basename /home/aaa/test.txt
    
    • dirname基本语法

    功能:返回完整路径最后/的前面的部分,常用于返回路径部分

    dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))
    
    • 应用实例

    案例1:请返回 /home/aaa/test.txt 的 /home/aaa

    dirname  /home/aaa/test.txt
    
  • 自定义函数

    基本语法:

    [function] funname[()]
    {
    	Action;
    	[return int;]
    }
    

    调用直接写函数名:

    funname [值]
    

    应用实例:

    案例1:计算输入两个参数的和(动态的获取),getSum

    #!/bin/bash
    #定义函数 getSum
    function getSum() {
    	SUM=$[$n1+$n2]
    	echo "和是=$SUM"
    }
    #输入两个值
    read -p "请输入一个数n1=" n1
    read -p "请输入一个数n2=" n2
    #调用自定义函数
    getSum $n1 $n2
    
举报

相关推荐

0 条评论