Linux
一、Linux基础篇
1. VM和Linux的安装
1.1 Linux虚拟机连接网络的三种方式
- NAT模式通过代理访问,可与外部通信,但是外部(192.168.0.30)是无法ping到内部的(192.168.100.88)
1.2 虚拟机克隆
- 直接拷贝一份安装好的虚拟机文件,在VM中:文件——打开
选择复制后文件夹中的配置文件打开
- 使用VM的克隆,在克隆时必须先关闭虚拟机
1.3 虚拟机快照
如果在使用虚拟机系统的时候,想回到原先的某一个状态,vmware提供这样的操作,叫做 快照管理。
1.4 虚拟机的迁移和删除
虚拟系统本质就是放在文件夹中的,虚拟机迁移可直接将文件夹剪切或者拷贝,虚拟机删除可以直接删除对应文件夹
2. Linux目录结构
2.1 目录结构
-
Linux的文件系统是采用层级式的树状目录结构,在此结构上的最上层是根目录"/",然后在此目录下再创建其他的目录
-
在Linux世界里,一切皆文件,甚至连硬件设备都映射为一个文件
2.2 具体目录结构
- /bin 【常用】 (/usr/bin、/usr/local/bin) 是Binary的缩写,这个目录存放着最经常使用的命令
- /sbin 【常用】 (/usr/sbin、/usr/local/sbin) s就是Super User 的意思,这里存放的是系统管理员使用的系统管理程序
- /home 【常用】 存放普通用户的主目录,在Linux中每个用户都有自己的一个目录,一般该目录名是以用户的账号命名
- /root 【常用】 该目录为系统管理员,也称作超级权限者的用户主目录
- /lib 系统开机所需要的最基本的动态连接共享库,其作用类似于Windows里的DLL文件,几乎所有的应用程序都需要用到这些共享库
- /lost+found 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件
- /etc 【常用】所有的系统管理所需要的配置文件和子目录,比如安装mysql 数据库,数据库的配置文件就会放在/etc目录下
- /usr 【常用】 用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录
- /boot 【常用】 存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件
- /proc【不能动】这个目录是一个虚拟目录,它是系统内存的映射,访问这个目录来获取系统信息
- /srv 【不能动】service的缩写,该目录存放一些服务启动之后需要提取的数据
- /sys 【不能动】 安装了2.6内核中新出现的一个文件系统 sysds
- /tmp 这个目录是用来存放一些临时文件的
- /dev 类似于windows的设备管理器,把所有硬件用文件形式存储
- /media 【常用】Linux系统会自动识别一些设备,例如U盘、光驱等等,识别后会把设备挂载到这个目录下
- /mnt 【常用】系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后就可以查看里面的内容了,比如:共享文件夹
- /opt 这是给主机额外安装软件(安装包 )所存放的目录,如安装ORACLE数据库就可以放到该目录下,默认为空
- /usr/local【常用】这是另一个给主机额外安装软件所安装的目录(目标目录 ),一般是通过编译源码方式安装的程序
- /var 【常用】这个目录中存放着不断扩充着的东西,习惯将经常被修改的目录放在这个目录下。包括各种日志文件
- /selinux [ security-enhanced linux ] SELinux 是一种安全子系统,它能控制程序只能访问特定文件,有三种工作模式,可以自行设置
二、Linux实操篇
1. 远程登录到Linux服务器
2. vi和vim编辑器
2.1 vi和vim基本介绍
Linux系统内置vi文本编辑器
Vim具有程序编辑的能力,可以看做是vi的增强版本,可以主动地以字体颜色辨别语法的正确性,方便程序设计。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
2.2 vi和vim常用的三种模式
- 正常模式
以 vim打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中,你可以使用『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档案内容,也可以使用『复制、粘贴』来处理你的文件数据。
- 插入模式
按下 i,I,o,O,a,A,r,R 等任何一个字母之后才会进入编辑模式,一般来说按 i 即可
- 命令行模式
在这个模式当中,可以提供你相关指令,完成读取、存盘、替换、离开vim、显示行号等的动作则是在此模式中达成的!
2.3 vi和vim基本使用
使用vim开发一个Hello.java程序(使用Xshell)
先输入 vim Hello.java 创建或者打开文件
进入的是一般模式,按i进入编辑模式
编写完程序后,按esc回到一般模式,再输入**:wq**命令保存退出
2.4 各种模式的相互切换
2.5 vi和vim快捷键
-
拷贝当前行 yy,拷贝当前行向下的5行 5yy ,并粘贴(输入p)
-
删除当前行 dd .删除当前行向下的5行 5dd
-
在文件中查找某个单词[命令行下/关键字,回车 查找,输入 n 就是查找下一个]
-
设置文件的行号,取消文件的行号.[命令行下**: set nu** 和**:set nonu**]
-
编辑/etc/profile 文件,在一般模式下,使用快捷键到该文档的最末行[G]和最首行[gg]
-
在一个文件中输入"hello”,然后又撤销这个动作 u
-
编辑/etc/profile 文件,并将光标移动到20行,输入20,再输入 shift+g
-
其他快捷键百度看文档!
3. 开机 、重启和用户登录注销
3.1 基本介绍
- shutdown -h now 立该进行关机 (h:halt,意为关机)
- shutdown -h 1 “hello,1分钟后会关机了”
- shutdown -r now 现在重新启动计算机
- halt 关机,作用和上面一样.
- reboot 现在重新启动计算机
- sync 把内存的数据同步到磁盘.
不管是重启系统还是关闭系统,首先要运行sync命令,把内存中的数据写到磁盘中
3.2 用户登录和注销
- 登录时尽量少用root账号,因为它是系统管理员,最大的权限,避免操作失误 。可以利用普通用户登录,登录后再用**“su - 用户名”**命令来切换成系统管理员身份
- 在提示符下输入logout即可 注销 用户
**使用细节:**logout注销指令在图形运行级别无效,在运行级别3下有效(运行级别后面介绍)
4. 用户管理
4.1 基本介绍
Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源 的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统
4.2 添加用户
4.2.1 基本语法
useradd 用户名
4.2.2 应用案例
添加一个用户 milan,默认该用户的家目录在 /home/milan
4.2.3 细节说明
- 当创建用户成功后,会自动创建和用户名同名的家目录
- 也可以通过 useradd -d 指定目录 新用户名 ,给新创建的用户指定家目录
在test目录下创建一个新用户king
4.3 指定/修改密码
4.3.1 基本语法
passwd 用户名 (必须要带用户名,否则修改的是当前用户的密码)
4.3.2 应用案例
给milan指定密码
显示当前用户所在的目录:pwd(print work directory)
4.4 删除用户
4.4.1 基本语法
userdel 用户名
4.4.2 应用案例
-
删除用户milan,但是保留家目录
-
删除用户zmc及其用户主目录
使用 userdel -r 用户名 r代表全部删除
4.5 删除用户
4.5.1 基本语法
id 用户名
4.5.2 应用实例
请查询root信息
4.6 切换用户
4.6.1 介绍
在操作Linux中,如果当前用户的权限不够,可以通过 su - 指令,切换到高权限用户,比如root
4.6.2 基本语法
su - 切换用户名
4.6.3 应用实例
创建一个用户jack,指定密码,然后切换到jack
4.6.4 细节说明
- 从权限高的用户切换到权限低的用户时,不需要输入密码,反之需要
- 当需要返回到原来用户时,使用exit/logout指令
4.7 查看当前用户/登录用户
4.7.1 基本语法
whoami/who am i
4.7.2 使用细节
whoami 命令和 who am i 命令是不同的 2 个命令,前者用来打印当前执行操作的用户名,后者则用来打印登陆当前 Linux 系统的用户名。
4.8 用户组
4.8.1 基本介绍
类似于角色,系统可以对有共性的多个用户进行统一的管理
4.8.2 新增组
语法:groupadd 组名
4.8.3 删除组
语法:groupdel 组名
4.8.4 增加用户时直接加上组
语法:useradd -g 用户组 用户名
增加一个用户 zwj,直接将他指定到 wudang
4.8.5 修改用户的组
语法:usermod -g 用户组 用户名
创建一个组:mojiao,把zwj放到mojiao中
4.8.6 使用细节
之前在使用useradd时并未指明用户组,系统会创建一个和用户名同名的用户组,并把这个用户添加到这个用户组中,即一人一个组
4.9 用户和组相关的文件
4.9.1 /etc/passwd 文件
用户(user)的配置文件,记录用户的各种信息
每行的含义:用户:口令:用户标识号(uid):组标识号(gid):注释性描述:主目录:登录Shell
4.9.2 /etc/shadow 文件
口令的配置文件
每行的含义:登录口:加密口令:最后一次修改时间:最小时间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
4.9.3 /etc/group 文件
组(group)的配置文件,记录Linux包含的组的信息
每行定义:组名:口令:组标识号:组内用户列表
5. 实用命令
5.1 指定运行级别
5.1.1 基本介绍
0:关机
1:单用户(找回丢失密码)
2:多用户状态没有网络服务
3:多用户状态有网络服务
4:系统未使用保留给用户
5:图形界面
6:系统重启
常用的运行级别是3和5,也可以指定默认运行级别
5.1.2 应用实例
通过命令:init 来切换不同的运行级别,比如:从5到3,然后关机
init 3/init 5
5.1.3 CentOS7后指定运行级别
实例:指定默认的运行级别
5.2 找回root密码
- 首先,启动系统,进入开机界面,在界面中按“e”进入编辑界面。如图
- 进入编辑界面,使用键盘上的上下键把光标往下移动,找到以““Linux16”开头内容所在的行数”,在行的最后面输入:init=/bin/sh。如图
-
接着,输入完成后,直接按快捷键:Ctrl+x 进入单用户模式。
-
接着,在光标闪烁的位置中输入:mount -o remount,rw /(注意:各个单词间有空格),完成后按键盘的回车键(Enter)。如图
- 在新的一行最后面输入:passwd, 完成后按键盘的回车键(Enter)。输入密码,然后再次确认密码即可(韩顺平提示: **密码长度最好8****位以上,**但不是必须的), 密码修改成功后,会显示passwd…的样式,说明密码修改成功
-
接着,在鼠标闪烁的位置中(最后一行中)输入:touch /.autorelabel(注意:touch与 /后面有一个空格),完成后按键盘的回车键(Enter)
-
继续在光标闪烁的位置中,输入:exec /sbin/init(注意:exec与 /后面有一个空格),完成后按键盘的回车键(Enter),等待系统自动修改密码(韩顺平提示:这个过程时间可能有点长,耐心等待),完成后,系统会自动重启, 新的密码生效了
5.3 帮助指令
5.3.1 man获得帮助信息
基本语法:man[命令或配置文件]
查看ls的帮助信息的指令为: man ls
按空格可以往下翻阅,按q(quit)退出
查阅后得知 -a 可以显示隐藏文件(隐藏文件以 .开头), -l 可以单列输出
选项可以组合使用 如: ls -a -l 或者 ls -al 或者 ls -la(选项顺序没有影响)
5.3.2 help指令
基本语法:help命令 (获得shell内置命令的帮助信息)
5.3.3 应用实例
查看cd命令的帮助信息
5.4 文件目录类指令
5.4.1 pwd指令
基本语法:pwd (显示当前工作目录的绝对路径)
5.4.2 ls指令
基本语法:ls [选项] [目录或者是文件]
-a:显示当前目录所有的文件和目录,包括隐藏的
-l:以列表的方式显示信息
-R:递归显示文件夹下的所有文件
5.4.3 cd指令
基本语法:cd [参数] (切换到指定目录)
cd ~ 或者直接 cd 回到自己的家目录,比如你是root,就是回到/root,如果你是tom,就是回到/home/tom
cd … 回到当前目录的上一级目录
应用案例:
案例1:使用绝对路径切换到root目录,cd /root
案例2:使用相对路径切换到/root目录,比如你现在在/home/tom,cd …/…/root
5.4.4 mkdir指令
基本语法:mkdir [选项] 要创建的目录
-p :创建多级目录
应用案例:
案例1:创建一个目录/home/dog, mkdir /home/dog
案例2:创建一个目录/homr/animal/tiger, mkdir -p /homr/animal/tiger
5.4.5 rmdir指令
基本语法:rmdir [选项] 要删除的空目录
应用案例:
删除一个目录 /home/dog
使用细节:rmdir删除的是空目录,如果目录下有内容时是无法删除的。如果需要删除非空目录,需要使用 rm -rf [要删除的目录]
5.4.6 touch指令
基本语法:touch 文件名称(touch指令创建空文件)
应用实例:创建一个空文件 hello.txt,touch hello.txt
5.4.7 cp指令
cp指令拷贝文件到指定目录
基本语法:cp [选项] source(源位置) dest(目标位置)
常用选项:-r 递归复制整个文件夹
使用细节:强制覆盖不提示的方法,cp改为\cp
5.4.8 rm指令
rm指令移除文件或目录
基本语法:rm [选项] 要删除的文件或目录
常用选项:-r : 递归删除整个文件夹 -f : 强制删除不提示
5.4.9 mv指令
mv指令移动文件与目录或重命名
基本语法:
mv oldNameFile newNameFile(重命名)
mv /temp/movefile /targetFolder(移动文件)
应用案例:
案例1:将 /home/cat.txt 文件重新命名为 pig.txt,在home下 mv cat.txt pig.txt
案例2:将 /home/pig.txt 文件移动到 /root目录下,在home下 mv pig,txt /root/
案例3:移动整个目录,将/opt/bbb 移动到 /home下,在opt下 mv /opt/bbb /home/
5.4.10 cat指令
cat查看文件内容,但是不能修改
基本语法:cat [选项] 要查看的文件
常用选项:-n:显示行号
应用案例:查看 /etc/profile 文件内容,并显示行号,cat -n /etc/profile
使用细节:cat只能浏览不能修改,为了浏览方便,一般会带上 **管道命令(把前面得到的结果交给下一个命令处理) **| more,即 cat -n /etc/profile | more,然后按Enter一行一行看,空格翻页着看
5.4.11 more指令
more指令是一个基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more指令中内置了若干快捷键
基本语法:more 要查看的文件
案例用more查看文件 /etc/profile,即 more /etc/profile
使用细节:cat和more可以组合使用
5.4.12 less指令
less指令用来分屏查看文件内容,它的功能与more指令类似,但是比more指令更加强大,支持各种显示终端。less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
基本语法:less 要查看的文件
操作说明:
5.4.13 echo指令
echo输出内容到控制台
基本语法:echo [选项] [输出内容]
应用实例:
案例1:使用echo指令输出环境变量,比如输出 $PATH $HOSTNAME,即 echo $PATH 和 echo $HOSTNAME
案例2:使用echo指令输出 hello,world~ 即 echo “hello,world~”
5.4.14 head指令
head用于显示文件的开头部分内容,默认情况下head指令显示文件的前10行内容
基本语法:
head 文件(查看文件头10行内容)
head -n 5 文件 (查看文件头5行内容,5可以是任意行数)
5.4.15 tail指令
tail用于输出文件中尾部的内容,默认情况下tail指令显示文件的前10行内容
基本语法:
tail 文件(查看文件尾10行内容)
tail -n 5 文件 (查看文件尾5行内容,5可以是任意行数)
tail -f 文件 (实时追踪该文档的所有更新)
5.4.16 >指令和>>指令
> 输出重定向 和 > >追加
基本语法:
ls -l > 文件 (列表的内容写入文件中,是覆盖写的,如果文件不存在会自动创建)
ls -al >> 文件 (列表的内容追加到文件的末尾)
cat 文件1 > 文件2 (将文件1里的内容覆盖到文件2)
echo “内容” >> 文件 (将内容追加到文件的末尾)
5.4.17 ln指令
软链接也称为符号链接,类似于windows里的快捷方式,主要存放了链接其他文件的路径
基本语法:ln -s [原文件或目录] [软链接名] (给原文件创建一个软链接)
应用案例:
案例1:在/home目录下创建一个软链接 myroot ,连接到/root目录,ln -s /root/ /home/myroot
案例2:删除软链接 myroot,rm /home/myroot
细节说明:当我们使用pwd指令查看目录时,仍然看到的是软链接所在的目录
5.4.18 history指令
查看已经执行过的历史命令,也可以执行历史指令
基本语法:history
应用案例:
案例1:显示所有的历史命令,history
案例2:显示最近使用过的10个指令,history 10
案例3:执行历史编号为5的指令,!5
5.5 时间日期类
5.5.1 date指令-显示当前日期
基本语法:
date (显示当前时间)
date + %Y (显示当前年份)
date + %m(显示当前月份)
date + %d (显示当前是哪一天)
date “+%Y-%m-%d %H:%M:%S” (显示年月日时分秒)
5.5.2 date指令-设置日期
基本语法:date -s 字符串时间
应用案例:设置系统当前时间为 2022-07-13 11:18:30,即 date -s “2022-07-13 11:18:30”
5.5.3 cal指令
查看日历
基本语法:cal [选项] (不加选项,显示本月日历)
应用案例:显示2022年日历,即 cal 2022
5.6 搜索查找类
5.6.1 find指令
find指令将从指定目录向下递归遍历其各个子目录,将满足条件的文件或者目录显示在终端。
基本语法:find [搜索范围] [选项]
选项说明:
应用案例:
案例1:按文件名:根据名称查找/home目录下的hello.txt文件,find /home -name hello.txt
案例2:按拥有者:查找/opt目录下,用户名称为nobody的文件,find /opt -user nobody
案例3:查找整个linux系统下大于200M的文件(+n 大于 -n 小于 n 等于),find / -size +200M
5.6.2 locate指令
locate指令可以快速定位文件路径。locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定时更新locate时刻。
基本语法:locate 搜索文件
特别说明:由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库
5.6.3 which指令
查看某个指令在哪个目录下,which [命令]
5.6.4 grep指令和管道符号|
grep过滤查找,管道符"|",表示将前一个命令的处理结果输出传递给后面的命令处理
基本语法:grep [选项] 查找内容 源文件
常用选项:
应用案例:在hello.txt 文件中,查找“yes”所在行,并且显示行号 ,
写法1:cat hello.txt | grep “yes”
写法2:grep -n “yes” hello.txt
5.7 压缩和解压类
5.7.1 gzip/gunzip指令
gzip用于压缩文件,gunzip用于解压文件
基本语法:
gzip 文件 (压缩文件,只能将文件压缩为*.gz文件)
gunzip 文件.gz (解压文件命令)
5.7.2 zip/unzip指令
zip用于压缩文件,unzip用于解压,这个在项目打包发布中很有用
基本语法:
zip [选项] XXX.zip 将要压缩的文件内容(压缩文件和目录的命令)
unzip [选项] XXX.zip (解压缩文件)
zip常用选项:-r 递归压缩,即压缩目录
unzip常用选项:-d<目录> 指定解压后文件的存放目录
应用案例:
案例1:将/home下的所有文件即home文件夹进行压缩成 myhome.zip,zip -r myhome.zip /home/
案例2:将myhome.zip 解压到 /opt/tmp 目录下,unzip -d /opt/tmp /home/myhome.zip
5.7.3 tar指令
tar指令是打包指令,最后打包后的文件是 .tar.gz 的文件
基本语法:tar [选项] XXX.tar.gz 打包的内容(打包目录,压缩后的文件格式 .tar.gz)
选项说明:
应用案例:
案例1:压缩多个文件,将/home/pig.txt 和 /home/cat.txt 压缩成 pc.tar.gz,tar -zcvf pc.tar.gz /home/pig.txt /home/cat.txt
案例2:将/home的文件夹压缩成 myhome.tar.gz,tar -zcvf myhome.tar.gz /home/
案例3:将pc.tar.gz解压到当前目录,tar -zxvf pc.tar.gz
案例4:将myhome.tar.gz解压到/opt/tmp目录下,tar -zxvf /home/myhome.tar.gz -C /opt/tmp(-C是指定目录)
6. 组管理和权限管理
6.1 Linux组的基本介绍
在linux中的每个用户必须属于一个组,不能独立于组外。在linux中每个文件有所有者、所在组(所有者所在的组)、其它组(除所在组以外的其它组)的概念
6.2 文件/目录 所有者
一般为文件的创建者,谁创建了该文件,就自然地成为该文件的所有者。
6.2.1 查看文件的所有者
ls -ahl(或者 ll)
6.2.2 修改文件的所有者
chown 新用户者 文件/目录(改变所有者)
chown 新用户名:新组名 文件/目录(改变所有者和所在组)
chown -R 新用户名 目录(使目录下的所有子文件或目录递归生效)
6.3 文件/目录 所在组
当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组(默认)
6.3.1 查看文件/目录所在组
同上,ls -ahl(或者 ll)
6.3.2 修改文件所在组
chgrp 组名 文件名
6.4 其它组
除文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组
6.5 改变用户所在组
在添加用户时,可以指定将该用户添加到哪个组中,同样的用root的管理权限可以改变某个用户所在的组
1.usermod -g 新组名 用户名
2.usermod -d 新目录名 用户名(改变该用户登录的初始目录,用户必须要有进入新目录的权限,才可以修改)
6.6 权限的基本介绍
总共10位,0到9位的说明:
1.第0位确定文件类型(d,-,l,c,b)
-
-是普通文件
-
l是链接,相当于windows的快捷方式
-
d是目录,相当于windows的文件夹
-
c是字符设备文件,鼠标 ,键盘
-
b是块设备,比如硬盘
2.第1-3位确定所有者(该文件的所有者)拥有该文件的权限
3.第4-6位确定所在组(同用户组的)拥有该文件的权限
4.第7-9位确定其他用户拥有该文件的权限
6.7 rwx权限详解
6.7.1 rwx作用到文件
- r代表可读(read):可以读取,查看
- w代表可写(write):可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写的权限,才能删除该文件
- x代表可执行(execute):可以被执行
6.7.2 rwx作用到目录
- r代表可读(read):可以读取,ls查看目录内容
- w代表可写(write):可以修改,对目录内创建+删除+重命名目录
- x代表可执行(execute):可以进入该目录
可用数字表示为;r=4,w=2,x=1 因此rwx=7
6.8 修改权限-chmod
6.8.1 基本说明
通过chmod指令,可以修改文件或者目录的权限
6.8.2 第一种方式:+、-、=变更权限
u:所有者 g:所在组 o:其他人 a:所有人(u、g、o的总和)
1.chmod u=rwx,g=rx,o=x 文件/目录名(分别给予权限)
2.chmod o+w 文件/目录名(给其他人增加写权限)
3.chmod a-x 文件/目录名(去除所有人执行的权限)
6.8.3 第二种方式:通过数字变更权限
r=4,w=2,x=1
rwx=4+2+1=7
chmod u=rwx,g=rx,o=x 就相当于 chmod 751
7. 定时任务调度
7.1 crond 任务调度
7.1.1 概述
任务调度:是指系统在某个时间执行的特定的命令或程序
任务调度分类:
1.系统工作:有些重要的工作必须周而复始地执行,如病毒扫描等等
2.个别用户工作:个别用户可能希望执行某些程序,比如对mqsql数据库的备份
7.1.2 基本语法
crontab [选项]
7.1.3 常用选项
指令:service crond restart (重启任务调度)
7.1.4 快速入门
现要求:每分钟执行一次指令 ls -l /etc/ > /tmp/to.txt
即:先 crontab -e 新建定时任务
再输入:
*/1 表示每隔1分钟执行一次
特殊符号的说明:
特定时间执行的案例:
7.1.5 应用案例
案例1:每隔1分钟,就将当前的日期信息,追加到 /tmp/mydate 文件中
*/1 * * * * date >> /tmp/mydate
案例2:每隔1分钟,将当前日期和日历都追加到 /home/mycal 文件中
在/home下新建my.sh文件:
date >> /home/mycal
cal >> /home/mycal
*/1 * * * * /home/my.sh(每隔一分钟去执行shell脚本)
案例3:每天凌晨2:00 将mysql数据库testdb,备份到文件/home/db.bak中
0 2 * * * mysqldump -u root -p密码 testdb > /home/db.bak
7.2 at定时任务
7.2.1 基本介绍
- at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行
- 默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业
- at命令是一次性定时计划任务,执行完一个任务之后不再执行此任务了
- 在使用at命令的时候,一定要保证atd进程的启动,可以使用相关指令来查看:ps -ef | grep atd
7.2.2 at命令格式
at [选项] [时间]
Ctrl + D (都按两次)结束at命令的输入
Ctrl+删除键 进行删除
7.2.3 at时间定义
7.2.4 应用案例
案例1:2天后的下午5点执行 /bin/ls /home
at 5pm + 2 days
at> /bin/ls /home
案例2:atq命令来查看系统中,没有执行的工作任务
atq
案例3:明天17点钟,输出时间到 /root/date100.log
at 5pm tomorrow
at> date > /root/date100.log
案例4:2分钟后,输出时间到 /root/date200.log
at now + 2 minutes
at> date > /root/date200.log
案例5:删除已经设置的任务
atrm 编号
8. Linux磁盘分区、挂载
8.1 Linux分区
8.1.1 原理介绍
- 对Linux来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分
- Linux采用一种叫“载入”的处理方式,它的整个文件系统包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得
8.1.2 硬盘说明
8.1.3 查看所有设备挂载情况
命令:lsblk 或者 lsblk -f
8.2 挂载的案例
8.3 磁盘情况查询
8.3.1 查询系统整体磁盘的使用情况
基本语法:df -h
8.3.2 查询指定目录的磁盘占用情况
基本语法:du -h 目录 (默认为当前目录)
-s 指定目录占用大小汇总
-h 带计量单位
-a 含文件
–max-depth=1 子目录深度
-c 列出明细的同时,增加汇总值
**应用案例:**查询 /opt 目录的磁盘占用情况,深度为1
du -h --max-depth=1 /opt
8.4 磁盘情况-工作使用指令
8.4.1 统计/opt文件夹下文件的个数
ls -l /opt | grep “^-” | wc -l
(正则,以 - 开头的,即文件,wc进行统计)
8.4.2 统计/opt文件夹下目录的个数
ls -l /opt | grep “^d” | wc -l
8.4.3 统计/opt文件夹下文件的个数,包括子文件夹里的
ls -lR /opt | grep “^-” | wc -l
(-R 递归)
8.4.4 统计/opt文件夹下目录的个数,包括子文件夹里的
ls -lR /opt | grep “^d” | wc -l
8.4.5 以树状显示目录结构
语法:tree 目录
默认情况下没有tree指令,使用 yum install tree 安装
9. 网络配置
9.1 Linux网络配置原理图
即ip地址必须要与wmnet8在同一个网段下才能ping通,192.168.2.*
9.2 查看网络IP和网关
windows下查看网络配置:ipconfig
linux下查看网络配置:ifconfig
9.3 Linux网络环境配置
9.3.1 第一种方法(自动获取)
linux登录后,通过界面来设置自动获取ip
特点:linux启动后会自动获取IP,缺点是每次自动获取的ip地址可能不一样,因此不能做服务器
9.3.2 第二种方法(指定ip)
直接修改配置文件来指定IP,并可以连接到外网
编辑:vim /etc/sysconfig/network-scripts/ifcfg-ens33
要求:将 ip地址配置成静态的,比如:ip地址为192.168.200.130
进入文件夹后:
需修改:BOOTPROTO=“static”
添加:
#IP地址
IPADDR=192.168.200.130
#网关
GATEWAY=192.168.200.2
#域名解析器
DNS1=192.168.200.2
然后需要修改这里的子网ip
与192.168.200.130在同一网段,并在NAT设置中,将网关修改为192.168.200.2
最后重启网络服务或者重启:
service network restart/reboot
【小白入门 通俗易懂】2021韩顺平 一周学会Linux_哔哩哔哩_bilibili
9.4 设置主机名和host映射
9.4.1 设置主机名
-
为了方便记忆,可以给linux系统设置主机名,也可以根据需要修改
-
指令:hostname(查看主机名)
-
修改文件在 /etc/hostname 指定
-
修改之后,重启生效
9.4.2 设置host映射
9.5 主机名解析过程分析(Hosts、DNS)
10. 进程管理
10.1 基本介绍
- 在Linux中,每个执行的程序都称为一个进程。每个进程都分配一个ID号(pid,进程号)
- 每个进程都可能以两种方式存在。前台与后台,所谓的前台进程就是用户目前的屏幕上可以进行操作的,后台进程则是实际在操作的。
- 一般系统的服务器都是以后台进程的方式存在,并且都会常驻在系统中,直到关机才结束。
10.2 显示系统执行的进程
10.2.1 基本介绍
ps命令是用来查看目前系统中,有哪些正在执行,以及它们执行的状况。可以不加任何参数
一般组合使用:ps -aus
10.2.2 ps详解
10.2.3 应用案例
要求:以全格式显示当前所有的进程,查看进程的父进程。查看sshd的父进程信息
ps -ef 是 以全格式显示当前所有的进程
-e 显示所有进程 -f 全格式
即:ps -ef |grep sshd
10.3 终止进程kill和killall
10.3.1 介绍
若是某个进程执行一半需要停止时,或是已消耗了很大的系统资源时,此时可以停止该进程
10.3.2 基本语法
kill [选项] 进程号
killall 进程名称(进程名称也支持通配符,这在系统因负载过大而变得很慢时很有用)
10.3.3 常用选项
-9:表示强迫进程立即停止
10.3.4 应用案例
案例1:踢到某个非法登录用户
先ps查询sshd登录用户的进程号,然后:kill 某个用户的进程号
案例2:终止远程登录服务sshd,在适当时候再次重启 sshd服务
即:kill 7665
重启 :/bin/systemctl start sshd.service
案例3:终止多个gedit(文本编辑器)
killall gedit
案例4:强制杀掉一个终端
kill -9 bash对应的进程号
10.4 查看进程树pstree
10.4.1 基本语法
pstree [选项]
10.4.2 常用选项
-p:显示进程的PID
-u:显示进程的所属用户
10.4.3 应用案例
案例1:以树状的形式显示进程的pid
pstree -p
案例2:以树状的形式显示进程的用户id
pstree -u
10.5 服务(service)管理
10.5.1 介绍
服务(service)本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysqld,sshd,防火墙等),因此我们又称为守护进程。
10.5.2 service管理指令
10.5.3 查看服务名
方式1:输入:setup,可以看到全部的系统服务
带*表示自动启动的服务,按空格可选择,按tab退出
方式2:ls -l /etc/init.d
10.5.4 服务的运行级别(runlevel)
10.5.5 chkconfig指令
设置服务在不同的运行级别上是否自启动
使用细节:设置完之后,需要reboot才能生效
10.5.6 systemctl 管理指令
基本语法:systemctl [start|stop|restart|status] 服务名
systemctl指令管理的服务在 /usr/lib/systemd/system 查看
10.5.7 systemctl 设置服务的自启动状态
10.5.8 细节讨论
10.5.9 防火墙
在客户端通过telnet测试端口
在Linux服务器防火墙开启时:
客户端测试端口会失败:
我们再关闭Linux的防火墙:
再次测试:
即可成功:
10.5.10 firewall指令-打开/关闭端口
10.5.11 应用案例
1.启用防火墙,测试111端口时候能telnet,不能
2.开放111端口,firewall-cmd --permanent --add-port=111/tcp,然后需要 firewall-cmd --reload
2.关闭111端口,firewall-cmd --permanent --remove-port=111/tcp,然后需要 firewall-cmd --reload
10.6 动态监控进程
10.6.1 介绍
top与ps命令很类似。它们都用来显示正在执行的进程 。top与ps最大的不同之处,在于top在执行一段时间后可以更新正在运行的进程。
10.6.2 基本语法
top [选项]
10.6.3 选项说明
10.6.4 交互操作说明
10.6.5 应用案例
10.7 监控网络状态
10.7.1 查看系统网络情况netstat
基本语法:
netstat [选项]
选项说明:
-an 按一定顺序排列输出
-p 显示哪个进程在调用
一般会直接使用 netstat -anp
11. RPM与YUM
11.1 rpm包的管理
11.1.1 介绍
11.1.2 rpm包的简单查询指令
查询已安装的rpm列表:rpm -qa | grep XXX
11.1.3 rpm包名基本格式
11.1.4 rpm包的其它查询指令
11.1.5 卸载rpm包
基本语法:rpm -e rpm包的名称//erase
应用案例:删除firefox安装包,rpm -e firefox
细节讨论:
11.1.6 安装rpm包
基本语法:rpm -ivh rpm包全路径名称 (安装文件包)
参数说明:
i=install 安装
v=verbose 提示
h=hash 进度条
11.2 yum
11.2.1 介绍
yum是一个shell前端软件包管理器。基于rpm包管理,能够从指定的服务器自动下载rpm包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包
11.2.2 yum的基本指令
查询yum服务器是否有需要安装的软件
yum list | grep xx
安装指定的yum包
yum install xxx
12. Shell编程
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至编写一些程序
12.1 Shell脚本的执行方式
12.1.1 脚本格式要求
- 以 #!/bin/bash 开头
- 脚本要有可执行权限
12.1.2 编写输出“hello world”的脚本
#!/bin/bash
echo "helllo world~"
12.1.3 脚本的常用执行方式
- 方式1(输入脚本的绝对路径或相对路径):首先赋予脚本+x的权限,再执行脚本
- 方式2(sh 脚本):不用赋予脚本+x的权限,直接执行即可
12.2 Shell的变量
12.2.1 Shell变量介绍
- Shell变量分为系统变量和用户自定义变量
- 系统变量: H O M E , HOME, HOME,PWD, S H E L L , SHELL, SHELL,USER
- set指令,显示当前shell中所有变量
12.2.2 Shell变量的定义
12.2.3 定义规则
12.3 设置环境变量
在/etc/profile 文件中添加环境变量
12.4 位置参数变量
12.4.1 介绍
12.4.2 基本语法
12.5 预定义变量
就是shell设计者事先已经定义好的变量,可以在shell脚本中使用
三、Linux高级篇
1. 日志管理
1.1 基本介绍
- 日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等
- 日志对于安全来说也很重要,它记录了系统每天发生的各种事情,通过日志来检查错误发生的原因,或者受到攻击时,攻击者留下的痕迹
- 日志就是用来记录重大事件的工具
1.2 系统常用日志
- /var/log/ 目录就是系统日志文件的保存位置:
- 系统常用的日志
1.3 日志管理服务 rsyslogd
查询Linux中的 rsyslogd 服务是否启动:
ps aux | grep “rsyslog” | grep -v “grep”(grep -v 反向匹配,只选择不匹配的行,这里即挑选出不含"grep"的)
查询 rsyslogd 服务的自启动状态:
systemctl list-unit-files | grep rsyslog
rsyslogd 服务的配置文件【重点】:
/etc/rsyslog.conf
由日志服务rsyslogd记录的日志文件,日志文件的格式包含以下4列:
日志管理服务的应用实例:自定义日志
要求:在/etc/rsyslog.conf 中添加一个日志文件 /var/log/zmc.log,当有事件发送时(比如sshd服务相关事件),该文件会接收到信息并保存。通过重启、登录,看看是否有日志保存
vim /etc/rsyslog.conf,添加配置日志
然后,> /var/log/zmc.log 创建空的日志文件
重启,登录后,查看日志文件如下:
自定义日志成功。
1.4 日志轮替
1.4.1 基本介绍
日志轮替就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存范围之后,就会删除
1.4.2 日志轮替文件命名
1.4.3 logrotate配置文件
参数说明:
1.4.4 把自己的日志加入日志轮替
- 第一种方法:直接在/etc/logrotate.conf 配置文件中写入该日志的轮替策略
- 第二种方法:在/etc/logrotate.d/目录中新建立该日志的轮替文件,在该轮替文件中写入正确的轮替策略 ,因为该目录中的文件都会被 "include"到/etc/logrotate.conf配置文件中,所以也会把日志加入轮替
- 推荐使用第二种方法,因为系统中需要轮替的日志非常多,如果全部直接写入 /etc/logrotate.conf 配置文件,那么这个文件的可管理性就会非常差,不利于此文件的维护
- 在/etc/logrotate.d/ 配置轮替文件一览:
1.4.5 日志轮替机制原理
日志轮替之所以可以在指定的时间备份日志,是依赖系统定时任务。在/etc/cron.daily/目录,就会发现这个目录中是有logrotate文件(可执行),logrotate通过这个文件依赖定时任务执行的
1.5 查看内存日志
2. Linux系统备份与恢复
2.1 基本介绍
实体机没有办法做快照,有两种方式进行备份和恢复:
- 把需要的文件(或者分区)用tar打包就行,下次需要恢复的时候,再解压开覆盖即可
- 使用dump和restore命令
没有安装过dump和restore指令的,需要先安装:
yum -y install dump
yum -y install restore
2.2 使用dump完成备份
2.2.1 dump基本介绍
dump支持分卷和增量备份(所谓增量备份是指上次备份后 修改/增加过的文件,也称差异备份)
2.2.2 dump语法说明
2.2.3 dump应用案例
案例1:将/boot 目录所有内容备份到 /opt/boot.bak.bz2 文件中,备份层级为"0"
dump -0uj -f /opt/boot.bak0.bz2 /boot
案例2:再次备份/boot 目录,备份层级为"1"(只备份上次使用层次"0"备份后发生 过改变的数据)
dump -1uj -f /opt/boot.bak1.bz2 /boot
2.2.4 dump -W
显示需要备份的文件及最后一次备份的层级,时间,日期
2.2.5 查看备份时间文件
cat /etc/dumpdates
2.2.6 dump 备份文件或者目录
只有分区支持增量备份,
如果备份文件或者目录,只能使用0级别备份
2.2.7 提醒
重要的备份文件,比如数据区,建议上传到其他服务器上保存!
2.3 使用restore完成恢复
2.3.1 基本介绍
restore用于从dump生成的备份文件中恢复原文件