个人信息
root_password: 123456
01 频繁
01 用户权限
01 例子
ll在查看文件,会出现文件的信息,从0~9开始
-rw-r--r--. 1 root root 0 Aug 28 15:59 Demo1.java
- 第一个字符表示文件类型 - 指的是文件。
- rw- 文件所有者对当前文件是可读可写不可执行的权限。
- r-- 与文件拥有者同一组的用户的权限是可读不可写不可执行。
- r-- 当前文件的其他用户的权限是可读不可写不可执行。
- 1:文件:硬连接数或 目录:子目录数
- root:当前文件所属的用户
- root:当前用户所属的组
- 0: 文件大小单位是字节
- Aug 28 15:59:文件最后修改时间
- Demo1.java:文件的名称
02 详细说明
总共10位,我们使用0-9来描述。
第0-9位说明
- 第0位确定文件类型(d,-,l,c,b)
-
-是文件
-
l是软连接,相当于windows的快捷方式
-
d是目录,相当于windows的文件夹
-
c是字符设别,鼠标,键盘(/dev 目录里面查看)
-
b是块设备,比如说硬盘(/dev 目录里面查看)
-
- 第1-3位确定所有者(该文件的所有者)拥有该文件的权限 --User
- 第4-6位确定所属组,(同用户组的)又有该文件的权限 --Group
- 第7-9位确定其他用户拥有改文件的权限 --Other
rwx权限详解(难点)
- rwx作用到文件
- r 代表可读 read 可以读取,查看
- w 代表可写 write 可以修改,但是不代表可以删除改文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除文件
- x 代表可执行 execute 可被执行
- rwx作用到目录
- r 代表可读 可以读取 ls查看目录的内容
- w 代表可写 对目录内进行创建+删除+重命名该目录
- x 代表可执行 可以进入该目录
03 权限修改
通过chmod指令,可以修改文件或者目录的权限。
- 第一种方式:+,-,=变更权限
u:所有者,g:所属组,o,其他人,a:所有人(u,g,o的总和)
案例演示:
- 给/home/Hello.java所有者读写执行的权限,给所在组执行读执行的权限,给其他组读执行的权限
[root@xq100 kobe]# chmod u=rwx,g=rx,o=rx Hello.java
- 给/home/Hello.java文件的所有者去除执行的权限,增加组写的权限
[root@xq100 kobe]# chmod u-x,g+w Hello.java
- 给/home/Hello.java文件的所有用户添加读的权限
[root@xq100 kobe]# chmod a+r Hello.java
第二种方式:通过数字变更权限 -- 不用,我要明确点
r=4,w=2,x=1 rwx=4+2+1=7
02 目录结构
linux的文件系统和windows的文件不一样。windows文件系统中会有很多盘符,在盘符下面又有很多的文件目录。但是linux文件目录不是这样的。linux文件系统采用的是层级式的树状目录结构,其中最上层的根目录是"/",然后在此目录下面再创建其他的目录。linux的树状目录结构非常重要,
可以用思维导图就行简单化
01 目录详解
- /bin目录
是Binary的缩写, 这个目录存放着最经常使用的命令。比如我们常用的cd命令 cp命令都是存放在bin目录里面。
- /sbin目录
s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
- /home目录
存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
- /root
该目录为系统管理员(root),也称作超级权限者的用户主目录。如果我们使用root账户登录,默认所处的目录位置就是在/root下面。
- /lib
系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。如果这个目录里面的文件被删除了,Linux操作系统也就不能正常运行了。
- /etc
所有的系统管理所需要的配置文件和子目录。Linux系统本身所需要用到的配置文件也是存放在etc目录。如果我们自己安装一些系统服务,比如MySQL数据库服务,那么和数据库相关的配置文件(my.cnf)也是存放在/etc目录里面。
- /usr
这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与windows下的program files目录。
- /boot
存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。如果这个目录里面的文件被删除了,linux操作系统也就不能正常运行了。
- /dev
类似于windows的设备管理器,把所有的硬件用文件的形式存储。
- /proc
这个目录是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统的信息。这个目录我们不要动,否则可能造成系统的崩溃。
- /srv
service的缩写,该目录存放的一些服务服务启动之后需要提取的数据。这个目录我们不要动,否则可能造成系统的崩溃。
- /sys
这个目录存放了linux内核相关的文件信息。这个目录我们不要动,否则可能造成系统的崩溃。
- /tmp
这个目录是用来存放一下临时文件的。
- /media
linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。比如我们插入的U盘 光驱都会被映射成对应的文件存放在media目录。
- /mnt
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里的内容了。比如我们上节内容设置的共享目录myshare。
- /opt
这是主机给安装软件所存放的目录,如果安装JDK可放到改目录下默认为空。上节内容我们安装VMwareTools-10.0.0-2977863.tar.gz。这个压缩文件就存放在opt目录的。
- /usr/local
简单的说就是应用程序安装之后,安装程序所存放的目录。一般是通过编译源码方式安装的程序。
- /var
这个目录中存放着在不断变化,扩充着的东西,最常用的就是包括各种日志文件。
03 编辑器vim
vim hello.java
插入 i
保存并退出 ESC :wq :q :q!(强制退出)
[num]yyp 拷贝当前向下的num行([num]yy ) 并粘贴(p)
[num]删除当前行(dd) 删除当前向下的[num]行 ([num]dd)
/关键字 就能查找下一个
设置文件的行号(: set nu)。取消文件的行号(: set nonu)
G : 回到文件的末尾处(光标回到文件的末尾处)
gg:回到文件的最开始处(光标回到文件的最开始处)
5 shift + g (快速到定位到第5行)。
u 是回撤
:s/World/shijie/ 要搜索当前行中字符串“World”的首次出现,并将其替换为“shijie”
:s/World/shijie/g 要替换当前行中搜索到的所有内容,可以添加`g`标志:
:%s/World/shijie/g 想搜索和替换整个文件中的匹配内容,使用百分比字符`%`作为范围。此字符指示从文件第一行到最后一行的范围
04 切换用户
su 用户名
注意:从高级别的用户切换到低级别的用户不需要输入密码。比如从root切换到kobe用户。
从低级别的用户输入到高级别的用户,需要输入密码。必须从kobe用户切换到root用户。
05 文件相关
目录操作
在linux操作系统里面,获取文件的方式有两种,一种是通过绝对路径的方式获取文件,一种是相对路径获取文件。
假设我们在当前指定的目录下面,想要获取指定的文件,我们可以通过相对路径和绝对路径的方式来获取。
-
pwd指令 显示当前目录的绝对路径
-
ls指令 显示当前目录下面的所有文件(目录)
常用选项:
-a: 显示当前目录下面的所有文件和目录 包括隐藏的。
-l: 以列表的方式显示文件(目录)信息。
- cd命令 切换到指定目录
常用选项:
~: cd ~ 回到当前用户的home目录(如果是root用户,那么回到的就是root目录下面,如果是非root用户,那么就回到home/用户目录 下面)
/: cd / 回到系统根目录
.. : cd .. 回到当前目录的上一级目录
例子: 比如我们现在所在的目录是/home/kobe目录。现在我们要使用回到/root目录下面去。
ccd ../../root
[root@xq100 home]# cd /home/kobe
[root@xq100 kobe]# cd ../../root
[root@xq100 ~]# pwd
/root
-: cd -回到上一条命令所在的目录
[root@xq100 home]# cd /home/kobe
[root@xq100 kobe]# cd ../../root
[root@xq100 ~]# pwd
/root
[root@xq100 ~]# cd - # 回到上一条命令所在的目录
/home/kobe
[root@xq100 kobe]# pwd
/home/kobe
直接切换到指定目录:
比如我们现在所在的目录是/home/kobe目录。现在我们要使用回到/root目录下面去。
[root@xq100 ~]# cd /home/kobe
[root@xq100 kobe]# pwd
/home/kobe
[root@xq100 kobe]# cd /root
[root@xq100 ~]# pwd
/root
- mkdir :用于创建目录
需求:在kobe目录下面创建dog目录
[root@xq100 ~]# cd /home/kobe
[root@xq100 kobe]# mkdir dog # 创建dog目录
[root@xq100 kobe]# ll
total 4
drwxr-xr-x. 2 root root 6 Aug 28 14:06 dog
-rw-r--r--. 1 root root 6 Aug 28 13:50 Hello.txt
我们也可以一次性创建多级目录。 比如在kobe目录下面创建/animal/cat目录
[root@xq100 kobe]# mkdir animal/cat
mkdir: cannot create directory ‘animal/cat’: No such file or directory
[root@xq100 kobe]#
此时报错,因为我们创建多级目录的时候,需要携带一个-p参数。
-p 创建多级目录。我们可以这样创建多级目录。
-p 创建多级目录。我们可以这样创建多级目录。
[root@xq100 kobe]# mkdir -p animal/cat # 创建多级目录
[root@xq100 kobe]# ll
total 4
drwxr-xr-x. 3 root root 17 Aug 28 14:09 animal
drwxr-xr-x. 2 root root 6 Aug 28 14:06 dog
-rw-r--r--. 1 root root 6 Aug 28 13:50 Hello.txt
- rmdir:指令删除空目录
需求:我们删除dog目录。
[root@xq100 kobe]# rmdir dog
[root@xq100 kobe]# ll
total 4
drwxr-xr-x. 3 root root 17 Aug 28 14:09 animal
-rw-r--r--. 1 root root 6 Aug 28 13:50 Hello.txt
接下来我们删除animal目录。(由于animal目录是非空目录,所以使用rmdir命令删除失败)
[root@xq100 kobe]# rmdir animal
rmdir: failed to remove ‘animal’: Directory not empty #报错 删除失败
[root@xq100 kobe]#
如果我们要删除非空目录或者文件,我们使用rm -rf命令实现(r 递归删除 f不询问删除)。
[root@xq100 kobe]# rm -rf animal #递归不询问的方式删除animal目录
[root@xq100 kobe]# ll
total 4
-rw-r--r--. 1 root root 6 Aug 28 13:50 Hello.txt
文件操作
- touch: 创建空文件
需求:在kobe目录下面,创建一个空文件Demo1.txt
[root@xq100 kobe]# touch Demo1.txt # 创建一个空文件Demo1.txt
[root@xq100 kobe]# ll
total 4
-rw-r--r--. 1 root root 0 Aug 28 14:14 Demo1.txt
-rw-r--r--. 1 root root 6 Aug 28 13:50 Hello.txt
- cp:拷贝文件到指定目录
需求1:将/home/kobe下面的Hello.txt拷贝至/home/guojing目录下面。
[root@xq100 kobe]# cp Hello.txt /home/guojing/ # 拷贝文件到home/guojing目录下面
[root@xq100 kobe]# cd /home/guojing/
[root@xq100 guojing]# ll
total 4
-rw-r--r--. 1 root root 6 Aug 28 14:18 Hello.txt
-r 递归复制整个文件。
需求:在kobe目录下面,创建test文件夹,再在test文件夹里面创建test.txt。最后将整个test文件目录拷贝至home/guojing目录。
[root@xq100 kobe]# ll
total 4
-rw-r--r--. 1 root root 0 Aug 28 14:14 Demo1.txt
-rw-r--r--. 1 root root 6 Aug 28 13:50 Hello.txt
drwxr-xr-x. 2 root root 22 Aug 28 14:19 test
[root@xq100 kobe]# cp -r test /home/guojing # 递归拷贝整个文件目录
[root@xq100 kobe]# cd /home/guojing
[root@xq100 guojing]# ll
total 4
-rw-r--r--. 1 root root 6 Aug 28 14:18 Hello.txt
drwxr-xr-x. 2 root root 22 Aug 28 14:21 test
- rm:移除文件或者目录
-r:递归删除整个文件夹
-f:强制删除不提示
- mv:移动文件(剪切)或重命名
在同一个目录下面操作: mv oldName newName (重命名)
需求:将kobe目录下面的Hello.txt重命名为Hello.java
[root@xq100 kobe]# mv Hello.txt Hello.java # 重命名
[root@xq100 kobe]# ll
total 4
-rw-r--r--. 1 root root 0 Aug 28 14:14 Demo1.txt
-rw-r--r--. 1 root root 6 Aug 28 13:50 Hello.java
drwxr-xr-x. 2 root root 22 Aug 28 14:19 test
在不同目录下面操作:
将home/kobe目录下面的Demo1.txt文件剪切到/home/guojing目录下面,并将文件命名为Demo1.java
[root@xq100 kobe]# mv Demo1.txt /home/guojing/Demo1.java # 剪切并重命名文件
[root@xq100 kobe]# ll
total 4
-rw-r--r--. 1 root root 6 Aug 28 13:50 Hello.java
drwxr-xr-x. 2 root root 22 Aug 28 14:19 test
[root@xq100 kobe]# cd /home/guojing
[root@xq100 guojing]# ll
total 4
-rw-r--r--. 1 root root 0 Aug 28 14:14 Demo1.java
-rw-r--r--. 1 root root 6 Aug 28 14:18 Hello.txt
drwxr-xr-x. 2 root root 22 Aug 28 14:21 test
查看文件操作
- cat 查看文件内容 cat [选项] 要查看的文件
需求:查看/etc/profile文件,并显示行号
-n 显示行号 cat -n /etc/profile
[root@xq100 guojing]# cat -n /etc/profile #浏览文件 并显示行号
cat只能浏览文件,并不能修改文件,为了浏览方便,一般会用上管道命令 |more。
[root@xq100 guojing]# cat -n /etc/profile | more #浏览文件 并显示行号 分屏幕显示 使用空格键可以翻页显示
-
more more指令是一个基于vi编辑器的文本过滤器,他以全屏的方式显示文本文件的内容,more指令内置了若干快捷键。
-
方式显示文本文件的内容,more指令内置了若干快捷键。
[root@xq100 guojing]# more /etc/profile
| 操作 | 功能说明 |
|---|---|
| 空格键 | 向下翻页 |
| Enter | 向下翻一行 |
| q | 代表立刻more,不再显示文件内容 |
| Ctrl + F | 向下滚动一屏幕 |
| Ctrl + B | 返回上一屏 |
| = | 输出当前行号 |
| :f | 输出文件名和当前行号 |
- less
less指令用于来分屏查看文件内容,他的功能与more类似,但是比more更加强大,支持各种显示终端。less指令在显示文件内容时,并不是一次将整个文件加载后才显示的,而是根据要加载的内容,对显示大型文件具有高效率。
语法: less 文件名称
[root@xq100 guojing]# less /etc/profile
| 操作 | 功能说明 |
|---|---|
| 空格键 | 向下翻动一页 |
| 上箭头键 | 向上翻动一页 |
| 下箭头键 | 向下翻动一页 |
| /字符串内容 | 搜索字符串 n:向下搜索 N:向上搜索 |
| q | 立刻less,不再显示文件内容 |
搜索查找
- find 将从指定目录下递归地遍历各个目录,将所有满足条件的目录显示在控制台。
语法格式:
find [搜索范围] [选项]
| 选项 | 功能 |
|---|---|
| -name | 按照文件的名称查找文件 |
| -user | 查找指定用户所属的文件 |
| -size | 按照指定的大小查找文件 |
find /home/kobe -name 'Hello.java' # 查询/home/kobe目录下面 名称为Hello.java的文件
find /home/kobe -name '*.java' # 查询所有java文件
find /opt -user 'root'#在/opt目录下,查询root用户创建的文件
find / -size +200M #查询大于200M的文件
ls -lh # 以友好的形式显示文件信息(很容易查看文件大小)
- locate指令 locate指令可以快速定位文件路径。locate指令利用事先建立好的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。locate指令无需遍历整个文件系统,查询速度较快。
特别说明:
由于locate指令基于数据库进行查询。所以第一次查询运行前,必须使用updatedb指令创建locate数据库。
需求:用locate指令快速定位 Hello.java 文件所在目录 locate Hello.java
updatedb
locate hello.java
- which指令 可以查看某个指令在哪个目录下,
查看ls指令在那个目录 which ls
查看reboot指令在那个目录下 which reboot
which ls # 查看ls指令所在的目录
which reboot # 查看reboot指令所在的目录
- grep指令
grep过滤查找,管道符,”|“,表示前一个指令的处理结果输出传递给后面的指令处理。一般我们将 | 和 grep一起结合起来使用。
基本语法:grep [选项] 查找内容 源文件
| 选项 | 功能 |
|---|---|
| -n | 显示行号 |
| -i | 忽略自动大小写 |
案例:查找在/home/kobe目录下的Hello.java文件中,查找hello所在行,并显示行号。
[root@xq100 kobe]# cat Hello.java |grep -ni 'Hello'
压缩和解压
- gzip/gunzip指令 gzip用于压缩文件 gunzip用于解压缩文件
gzip 压缩文件(将文件压缩为*.gz的文件,原文件被压缩后不存在。)
需求: 将kobe目录下面的Demo1.java进行压缩
gunzip 文件.gz (解压缩文件命令)
gzip Demo1.java
gunzip Demo1.java.gz # 解压之后 当前压缩文件会不存在
- zip/unzip指令
zip用于压缩文件,unzip用于解压的,这个功能打包发布中很有用。
zip [选项] XXX.zip 将要压缩的内容 (压缩文件和目录的命令)
-r: 递归压缩,即压缩目录
-d: 指定解压后文件存放方目录
需求:将kobe目录及其下面的所有文件进行压缩,压缩成myFile.zip
[root@xq100 home]# zip -r myFile.zip kobe/
需求:将home目录下面的zip文件解压到home/tmp文件目录中去
[root@xq100 home]# mkdir tmp # 创建tmp目录
[root@xq100 home]# unzip -d /home/tmp myFile.zip # 将zip文件解压到tmp目录下面
- tar指令
tar指令是打包指令,最后打包后的文件是.tar.gz的文件。
语法格式:tar [选项] XXX.tar.gz 打包的内容 (功能描述:打包目录,压缩后的文件格式.tar,gz)
| 选项 | 功能 |
|---|---|
| -c | 产生tar打包文件 |
| -v | 显示详细信息 |
| -f | 指定压缩后的文件名 |
| -z | 打包同时压缩 |
| -x | 解压tar包文件 |
需求1:将home目录下面的kobe目录压缩成myFile.tar.gz
需求2:将myFile.tar.gz文件解压到当前目录
需求3:将myFile.tar.gz文件解压到/home/tmp目录下面 需要使用-C参数指定解压的位置。
tar -zcvf MyFile.tar.gz /kobe/
tar -zxvf MyFile.tar.gz
tar -zxvf myFile.tar.gz -C /home/tmp
杂乱指令
- echo:将输入内容到控制台
需求1:使用echo指令输出环境变量。
[root@xq100 guojing]# echo $PATH # 输出环境变量
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@xq100 guojing]# echo $HOSTNAME # 输出主机名称
xq100
需求2:输出hello world
[root@xq100 guojing]# echo "hello,world"
hello,world
- head: head用于显示文件开头部分内容,默认情况下head希纳是文件前10行的内容
基本语法: head 文件
head -n 5 文件 显示前五行的内容 5可以是任意数
[root@xq100 guojing]# head /etc/profile # 默认显示前10条内容
[root@xq100 guojing]# head -n 5 /etc/profile # 默认显示前5行内容
- tail指令 用于输出文件中尾部的内容,默认情况下tail指令显示文件的前10行内容
tail 文件 (查看文件最后10行的内容)
tail -n 5 文件 (查看文件最后5行的内容,5可以是任意数)
tail -f 文件 (实时监控文件发生的变化)
[root@xq100 guojing]# tail /etc/profile # 显示最后10行的数据
[root@xq100 guojing]# tail -n 5 /etc/profile #显示最后5行的数据
需求:创建一个空文件test.txt。实时监控这个文件的变化
[root@xq100 guojing]# touch test.txt
[root@xq100 guojing]# tail -f test.txt
在另一个终端,我们向test.txt文档追加内容:
我们再观察控制台的变化情况:
>指令和>>指令: >输出重定向 ,>>追加
echo ‘hello’ > /home/guojing/test.txt (将hello输入到guojing文件夹下的test.txt中 之前内容覆盖)。
echo ‘hello’ >> /home/guojing/test.txt (将hello追加到guojing文件夹下的test.txt文件的末尾处 之前内容不会覆盖)。
cat /etc/profile > /home/guojing/myprofile (将etc/profile 重定向到home目录下的myprofile 没有会自动创建)
cal > /home/guojing/test.txt (将日历信息重定向输出到opt下的test文件)覆盖
cal >> /home/guojing/test.txt(将日历信息追加到opt目录下的test文件)追加
- 软连接
软连接也称为符号链接,类似中windows里面的快捷方式,主要是存放了链接文件的路径。
ln -s [源文件或目录] [软连接名称]
我们在/home目录下创建一个软连接linkToRoot 链接到/root目录
需求:在kobe目录下面创建软连接linkToRoot。这个软连接指向root目录。
删除软连接 rm -f /linkToRoot
- history指令 查看用户已经执行过的历史指令
06 时间指令
- date指令:
基本语法:
date(功能描述:显示当前时间)
date +%Y(功能描述:显示当前年份)
date +%m(功能描述:显示当前月份)
date +%d(功能描述:显示当前是哪一天)
date "+%Y-%m-%d %H:%M:%S"(功能描述:显示年月日时分秒)
date指令也可以设置日期
基本语法:date -s 字符串时间
- cal 日历指令
cal不加任何参数是当月的
cal 2025 是2025月份的全年
07 定时任务调度
01 crond任务调度
定时任务
crontab命令进行定时任务调度的设置。何为任务调度?
任务调度:指在某个时间执行特定的命令或者程序。
任务调度的分类:
- 系统任务:有些重要的工作必须周而复始的执行 比如病毒扫描 。
- 个别用户工作: 个别用户希望执行某些程序,比如对mysql数据库的备份。
基本语法:crontab [选项]
常用选项:
-e: 编辑定时任务
-l:查询定时任务
-r:删除当前用户的所有定时任务
需求:创建一个定时任务,将etc目录下面的文件列表查询出来,追加到/tmp/etc.txt文件中,并每分钟执行1次。
crontab -e
#调度任务
*/1 * * * * ls -l /etc/ > /tmp/etc.txt
然后按esc键,保存并退出
时间规则
- 占位符说明
| 项目 | 含义 | 范围 |
|---|---|---|
| 第一个 “*” | 一个小时当中的第几分钟 | 0-59 |
| 第二个 “*” | 一天当中的第几个小时 | 0-23 |
| 第三个 “*” | 一个月当中的第几天 | 1-31 |
| 第四个 “*” | 一年当中的第几个月 | 1-12 |
| 第五个 “*” | 一周当中的星期几 | 0-7(0和7都代表星期日) |
- 特殊符号说明
| 特殊符号 | 含义 |
|---|---|
| * | 代表任何时间,比如第一个“*”就代表1小时中每分钟都执行1次的意思。 |
| , | 代表不连续的时间,比如“0,8,12,16 * * *”就代表1天中的8点过0分,12点过0分,16点过0分都会执行1次。 |
| - | 代表连续的世间范围,比如“0,5 * * 1-6”就代表星期1到星期6的凌晨5点过0分都会执行。 |
| */n | 代表每隔多久执行1次。比如“*/10 * * * *” 就代表每隔10分钟就执行1次命令。 |
- 特殊时间执行案例
| 时间 | 含义 |
|---|---|
| 45 22 * * * | 每天在22时45分执行任务 |
| 0 17 * * 1 | 每周一的17点过0分执行任务 |
| 0 5 1,15 * * | 每月的1号和15号的凌晨5点钟执行任务 |
| 40 4 * * 1-5 | 每周1-到周5的凌晨4:40分执行任务 |
| */10 4 * * * | 每天的凌晨4点。每隔10分钟就执行1次任务 |
任务调度实例
案例1:每隔1分钟,将当前的日期信息追加到/tmp/mydate.txt文件中。
*/1 * * * * date >> /tmp/mydate.txt
案例2:每隔1分钟,将将当前的日期和日历都追加到/home/mycal.txt文件中。
按ESC,保存并退出。但是我们发现这个脚本,root没有执行权限。
我们需要修改脚本的权限,使当前用户root能够对脚本进行执行。
cd /home
vim my.sh
#my.sh被输入的内容
date >> /home/mycal.txt
cal >> /home/mycal.txt
crontab -e
#输入内容
*/1 * * * * ls -l /etc/ > /tmp/etc.txt
*/1 * * * * /home/my.sh
每天凌晨2点,将mysql数据库testdb,备份到文件中。(提示:备份数据库的指令为 mysqldump -u root -p密码 数据库名称 > /home/文件名称)
crontab -e
0 2 * * * mysqldump -u root -proot testdb > /home/db.bak
还有其他几个任务调度指令,大家了解一下:
- crontab -r :终止任务调度
-
contab -l :列出当前有哪些任务调度
-
service crond restart [重启任务调度]
02 at任务调度
一次性工作队列
-
at命令是一次性定时执行任务计划,at的守护线程atd以后台的模式运行,检查作业队列来运行。
-
默认情况下,atd守护线程每60秒检查作业队列,有作业时会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。
-
at命令是一次性定制的计划任务,执行完一个任务后就不再执行此任务了。
-
在使用at命令的时候,一定要保证atd进程的启动,可以用相关指令来查看
ps -ef | grep atd
- at时间定义:
| 格式 | 含义 | 举例 |
|---|---|---|
| HH:MM | 当天 HH:MM 执行,若当天时间已过,则在明天 HH:MM 执行 | 当天 4:00 (若超时则为明天 4:00):4:00 |
| 英文粗略时间单次 | midnight(午夜,00:00)、noon(中午,12:00)、teatime(下午茶时间,16:00) tomorrow(明天) | midnight、noon、teatime |
| 英文月名A 日期B [年份C] | C年A月B日执行 | 在 2018 年 1 月 15 日执行:January 15 2018 |
| 日期时间戳形式 | 绝对计时法 时间+日期 时间: HH:MM日期: MMDDYY或MM/DD/YY或MM.DD.YY | 在 2018 年 1 月 15 日执行:011518或01/15/18或01.15.18 |
| now + 数量 单位 | 相对计时法 以 minutes、hours、days 或 weeks 为单位 | 5 天后的此时此刻执行:now + 5 days |
1.12.5 at任务调度实例
- 常用选项
语法格式:
at [选项] [时间]
at > 命令(输入两次 Ctrl + D)
释义:
第一行:at 指令输入结束后,回车到下一行输入指令 第二行:开头的 at> 无需输入,是系统自动添加的 命令输入结束后:Ctrl + D 结束命令的输入,要输入两次
- 两天后的下午6点执行ll命令
- 使用atq命令,查看系统中有没有执行工作任务
[root@xq100 home]# atq
1 Wed Aug 31 17:00:00 2022 a root
2 Wed Aug 31 18:00:00 2022 a root
- 明天17点钟,输出时间都指定文件内,比如/home/date100.log
[root@xq100 home]# at 5pm tomorrow
at> date > /home/date100.log<EOT>
job 4 at Tue Aug 30 17:00:00 2022
- 2分钟后,输出时间到指定文件内,比如/home/dat200.log
[root@xq100 home]# at now + 2 minutes
at> date > /home/date200.log<EOT>
job 5 at Mon Aug 29 23:24:00 2022
使用atq查看队列任务:
2分钟之后,我们再次查看队列任务:
我们发现5号任务没有了,因为5号任务被执行了。所以被移出队列了。
- 删除已经设置好的任务
atq
atrm 1 #删除1号任务
atq
08 rpm与yum
01 rpm
rpm是互联网下载包和打包和安装工具,他包含在某些linux分版中,他具有生产.rpm扩展名的文件,RPM是redhat package manage(软件包管理工具的缩写),类似于setup.exe。
我们看看rpm相关的指令:
- 查询所有安装的rpm列表
[root@xq100 ~]# rpm -qa
[root@xq100 ~]# rpm -qa | more # 分页展示所有的rpm列表
- 查询当前系统中是否安装了指定的软件
[root@xq100 ~]# rpm -qa | grep firefox # 查询linux系统中是否已经安装了火狐浏览器
firefox-60.8.0-1.el7.centos.x86_64
一个rpm包的名称命名规则:
firefox:rpm包名
60.8.0-1.el7:rpm包的版本号
centos:rpm包适用于的操作系统
x86_64:适用于64位的操作系统。(如果是i686或者i386说明适用于32位操作系统,noarch表示通用。)
- 查看软件包是否安装
[root@xq100 opt]# rpm -q firefox # 查看火狐浏览器是否存在rpm包(安装)
firefox-60.8.0-1.el7.centos.x86_64
- 查询软件安装的详细信息
[root@xq100 opt]# rpm -qi firefox # 查询火狐浏览器的详细安装信息
Name : firefox
Version : 60.8.0
Release : 1.el7.centos
Architecture: x86_64
Install Date: Thu 18 Aug 2022 02:50:39 PM CST
Group : Unspecified
Size : 218777805
License : MPLv1.1 or GPLv2+ or LGPLv2+
Signature : RSA/SHA256, Fri 12 Jul 2019 11:01:23 PM CST, Key ID 24c6a8a7f4a80eb5
Source RPM : firefox-60.8.0-1.el7.centos.src.rpm
Build Date : Fri 12 Jul 2019 02:04:42 AM CST
Build Host : x86-01.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : https://www.mozilla.org/firefox/
Summary : Mozilla Firefox Web browser
Description :
Mozilla Firefox is an open-source web browser, designed for standards
compliance, performance and portability.
- 查看rpm包安装之后的文件
[root@xq100 opt]# rpm -ql mariadb-libs-5.5.64-1.el7.x86_64
- 查看指定的文件所属的rpm包
[root@xq100 opt]# rpm -qf /etc/my.cnf # 查询/etc目录下面的my.cnf文件所属的rpm包
mariadb-libs-5.5.64-1.el7.x86_64
如果某一个rpm包我们不想要了,我们也可以卸载。
[root@xq100 opt]# rpm -e firefox #删除firefox
注意:如果其它的软件包依赖于要删除的软件包,卸载时则会产生错误。此时如果我们想强制删除,可以添加另外的参数--nodeps。
[root@xq100 opt]# rpm -e --nodeps firefox #删除firefox
- 安装rpm包
基本语法: rpm -ivh RPM包全路径名称
几个参数:
i=install 安装
v=verbose 提示
h=hash 进度条
案例:使用rpm命令安装firefox
[root@xq100 ~]# rpm -e firefox # 删除firefox
[root@xq100 ~]# rpm -q firefox # 查询firefox是否删除成功
package firefox is not installed
接下来我们需要去下载rpm包,其实linux操作系统内置了firefox的安装包,我们打开光驱:
然后找到Packages目录:
然后打开Packages目录,找到firefox的rpm包:
将其拷贝至/opt目录下面:
最后我们安装rpm包:
[root@xq100 ~]# rpm -ivh /opt/firefox-60.8.0-1.el7.centos.x86_64.rpm
最后我们发现firefox又安装成功了。
02 yum
Yum是一个Shell前端软件包管理器,基于RPM包管理,能够从指定的服务器自动下载RPM包并安装,并且可以自动处理依赖性关系,并且一次安装所有的依赖软件包。下面我们用一副图来理解yum命令:
基本指令
查询yum服务器上是否有需要安装的软件:
yum install | grep xxx软件列表
下载并安转指定的yum包:
yum install xxx 的rpm包名
案例:使用yum命令安装firefox
[root@xq100 opt]# rpm -e firefox #删除firefox 此时我们发现linux服务器里面的火狐浏览器不存在了
[root@xq100 opt]# rpm list | grep firefox # 查看服务器上是否存在指定的rpm包
firefox.x86_64 60.8.0-1.el7.centos @anaconda
firefox.i686 91.12.0-2.el7.centos updates
firefox.x86_64 91.12.0-2.el7.centos updates
[root@xq100 opt]# yum install firefox.x86_64 # 下载并安装firefox,我们再查看linux服务器里面的火狐浏览器,发现又有了
09 进程管理
01 进程介绍
在linux中,每个执行的程序都为一个进程,每个进程都分配了一个id号(pid,进程号)。
每个进程都可能以两种形式存在,前台和后台,所谓前台进程就是及用户在目录上可以进行操作的(占用屏幕 比如我们的top指令),后台是无法在屏幕上操作的进程。 一般系统的服务进程都是以后台进程的方式存在,而且会常驻在系统中直到关机才结束。
02 查看运行进程
ps命令是用来查看系统中哪些正在运行,以及他们的运行的状况,可以不加任何参数。
[root@xq100 ~]# ps
PID TTY TIME CMD
2137 pts/0 00:00:00 bash
4166 pts/0 00:00:00 ps
| 字段 | 说明 |
|---|---|
| PID | 进程识别号 |
| TTV | 终端机号 |
| TIME | 此进程所消耗cpu时间 |
| CMD | 正在执行命令或进程名 |
我们也可以加上下面几个参数,来查看进程信息
ps -a:显示终端所用的进程信息
ps-u:以用户的格式显示进程的信息
ps-x:显示后台程序运行的参数
[root@xq100 ~]# ps -aux | more
我们对上面查询的信息进行详细解释:
USER: 进程所属的用户名称。
PID:进程号。
%CPU:进程占用CPU的百分比。
%MEM:进程占用物理内存的百分比。
VSZ:进程占用虚拟内存的大小(KB)。
RSS:进程占用物理内存的大小(KB)。
STAT:进程状态,S-代表睡眠 R-正在运行 D-短期等待 Z-僵死进程 T-被停止的线程。
START:进程启动的时间。
TIME:进程使用CPU的时间。
COMMAND:进程启动所需要的命令和参数。
03 进程的应用实例
需求:以全格式显示当前的所有进程,查看进行的父进程。查看sshd的父进程信息。
- ps -ef 以全格式查看所有进程信息。
- -e 显示所有进程 -f 全格式显示。
- 查看指定进程信息 ps -ef | grep sshd
也就是说sshd进程的进程id是1328.其父进程id是1。1928的进程的父进程是进程id为1328的进程。那么id为1的进程是什么样的呢,我们可以使用ps -ef | more的命令查看:
04 终止进程
若是某个进程执行一半需要停止时候,或是已经消耗了很大的系统资源时候,可以考虑停止该线程。
基本语法:
kill [选项] 进程号 :通过进程号杀死/终止进程。
killall:会杀死当前进程和其子进程。
常用选项:
-9 表示强迫进程立即停止
- 需求1:强制让登陆用户kobe下线
我们首先在xshell终端使用kobe登陆。然后在另外一个终端使用root用户登录,并在root用户下面执行指令:ps -aux | grep sshd。
此时我们发现kobe用户的进程id是6940.我们在root用户下面使用kill命令来终止这个进程。
[root@xq100 ~]# kill 6940
回到Xshell,我们发现kobe这个用户已经被注销了。
- 需求2:终止远程登录服务sshd。不允许远程登录。然后重启sshd服务,允许远程登录。
我们发现,sshd的进程id是1328.我们kill掉这个进程。
[root@xq100 ~]# kill 1328
我们使用Xshell远程登录,发现不起作用了。此时我们可以使用/bin/systemctl start sshd.service重启ssd服务,这样就可以再次远程登录了。
[root@xq100 ~]# /bin/systemctl start sshd.service
[root@xq100 ~]# ps -aux | grep sshd
root 7395 0.3 0.2 112920 4316 ? Ss 21:48 0:00 /usr/sbin/sshd -D
root 7403 0.0 0.0 112712 960 pts/1 R+ 21:48 0:00 grep --color=auto sshd
- 需求3:终止多个gedit(记事本打开文件的进程),演示killall。
我们在linux图形化界面里面打开多个记事本。然后在Xshell里面使用killall 命令:
[root@xq100 ~]# killall gedit
此时记事本打开的文件就会自动被关闭。
- 需求4:强制杀掉一个终端
比如我们在linux图形化界面里面开启两个命令 终端:
现在我们使用ps命令来查看两个终端的进程信息:
[root@xq100 ~]# ps -aux | grep bash
比如我们现在想杀死id为7946的进程,我们使用kill 7946。发现没有任何反应,因为linux认为这个命令终端是正常运行的,不允许我们杀掉。此时我们需要加上-9参数来强制杀掉。
[root@xq100 ~]# kill -9 7946 #可以强制杀掉另一个命令终端
05 查看进程树
pstree [选项],可以更加直观的来查看进程信息。
-p:显示进程的PID。
-u:显示进程的所属用户。
- 案例1:以树状的形式显示进程的pid
[root@xq100 ~]# pstree # 显示进程树
[root@xq100 ~]# pstree -p # 显示进程树(携带进程号)
- 案例2:以树状的形式展示进程的用户信息
[root@xq100 ~]# pstree -u
10 Linux服务管理
service(本质)就是进程,但是是运行在后台的,通常都会监听某个端口,等待其他程序的请求,比如说(mysql3306,sshd222,redis6379),因为我们又称为守护进程,在Linux中是重要的知识点。
下面我们用一幅图来解释什么是守护进程:
01 service管理指令
- service 服务名 [start|stop,reload,status]
- 在CentOs7.0后,很多服务不再使用Service,而是systemctl
- service 指令管理的服务在/etc/init.d查看
我们可以简单使用一下,比如查看network服务的状态:
[root@xq100 init.d]# service network status
Configured devices:
lo ens33
Currently active devices:
lo ens33 virbr0
案例:使用service指令,查看,关闭启动network**[注意在虚拟系统演示时:因为网络连接会关闭]**
[root@xq100 ~]# service network stop # 此时Xshell连接linux会连接不上
[root@xq100 ~]# service network start #重启网络服务 此时Xshell会连接上linux
- 更多的系统服务,我们可以通过setup指令去查看
[root@xq100 init.d]# setup
选择系统服务,回车,我们可以看到系统服务的详细信息:
注意:
- [*] 代表这些系统服务会随着开机自启动而启动
- 如果我们想去掉星号或者加上星号,上下按键切换到对应的服务按空格键即可。
- 使用Tab键选择OK或Cancel.
02 chkconfig指令
通过chkconfig可以给服务的各个运行级别设置自启动/关闭。
chkconfig指令管理的服务在 /etc/init.d查看。
注意:在Centos 7.0以后,很多服务使用systemctl管理。
基本用法
- 查看服务 chkconfig --list[|grep “”]
- 设置服务在指定级别启动/关闭 chkconfig --level network on/off
我们现在罗列出使用chkconfig指令管理的服务信息:
[root@xq100 ~]# chkconfig --list
netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
vmware-tools 0:off 1:off 2:on 3:on 4:on 5:on 6:off
vmware-tools-thinprint 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@xq100 ~]# chkconfig --list | grep network #查看指定服务在运行级别是否开启关闭
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
注意: 上面的数字代表linux的运行级别。
案例:对于network服务,进行各种操作,把network在3运行级别,关闭自启动。
[root@xq100 ~]# chkconfig --level 3 network off 关闭
[root@xq100 ~]# chkconfig --level 5 network on 打开
注意:chkconfig重新设置服务自启动或者关闭,需要重启机器reboot生效。
03 systemctl服务管理指令
systemctl 指令管理的服务在/usr/lib/systemd/system中查看。
-
服务启动/停止/重启/重载/查看状态: systemctl [start | stop | restart | status] 服务名
-
查看所有服务的自启动状态
[root@xq100 system]# systemctl list-unit-files | grep firewall
firewalld.service enabled
[root@xq100 system]# systemctl status firewalld.service # 查看防火墙状态
[root@xq100 system]# systemctl stop firewalld.service # 停止防火墙状态
[root@xq100 system]# systemctl restart firewalld.service # 重启防火墙
服务的状态如下:
masked 此服务禁止自启动
static 该服务无法自启动,只能作为其他文件的依赖
enabled 已配置为自启动
disabled 未配置为自启动
- 查看某一服务是否自启动
[root@xq100 system]# systemctl is-enabled firewalld.service # 知道完整服务名
enabled
- 设置服务自启动 (服务运行级别 3、5)
[root@xq100 system]# systemctl enable firewalld.service
- 设置服务禁用自启动 (服务运行级别 3、5)
[root@xq100 system]# systemctl disable firewalld.service
04 firewall防火墙指令
防火墙的核心功能:打开或关闭对应端口。关闭端口,则外部的数据请求不能通过对应的端口,与服务器上的程序进行通信 在真正的生产环境,为保证安全,需要启动防火墙并配置打开和关闭的端口。
基本语法:
- 打开端口/允许协议 firewall-cmd --permanent --add-port=端口号/协议
- 关闭端口/禁用协议 firewall-cmd --permanent --remove-port=端口号/协议
- 查询端口/协议是否开启 firewall-cmd --query-port=端口/协议
- 查询防火墙所有开放的端口/协议配置 firewall-cmd --list-ports
- 重载防火墙 firewall-cmd --reload
[root@xq100 system]# firewall-cmd --query-port=3306/tcp # 查询防火墙是否开启3306端口
no
[root@xq100 system]# firewall-cmd --list-ports # 查看防火墙开放的端口有哪些
[root@xq100 system]# firewall-cmd --permanent --add-port=3306/tcp # 开放防火墙对3306端口的访问权限
success
[root@xq100 system]# firewall-cmd --reload # 重载防火墙
success
[root@xq100 system]# firewall-cmd --list-ports
3306/tcp
02 中等
01 虚拟机快照
右键即可
02 linux关机重启
-
shutdown
shutdown -h now 表示立即关机
shutdown -h 1:表示一分钟后关机
shutdown -r now :立即重启
-
halt
就是直接使用,效果等同于关机
-
sync
把内存的数据同步到磁盘
-
reboot
就是重启系统
注意细节:
- 不管是重启系统还是关闭系统,首先要运行sync命令,把内存中的数据写入到磁盘中。
- 目前的shutdown、reboot、halt命令在关机前都进行了sync。
03 用户管理
01 增删查
增加用户
在root用户下,我们可以创建很多其它的用户,并且这些用户都会生成对应的目录,这些目录位于/home/用户名的目录下面。如果我们使用自己创建的用户登录,默认的情况下,用户所在的目录就是/home/用户目录所在的位置。
useradd koke
cd /home
ll
细节:
- 当用户创建成功后,会自动的创建和用户同名的目录。这个目录位于/home下面。
- 也可以通过 useradd -d来指定目录新的用户名,给新的用户名指定目录
增加用户密码
创建密码的命令: passwd 用户名
我们执行logout指令,然后使用kobe进行登录,发现可以成功登录。
删除用户
删除用户有两种情况,一种是删除用户,保存用户对应的目录。还有一种是删除用户,连用户对应的目录也删除掉。
- 删除用户,保存用户对应的目录
userdel 用户名
注意,我们切换到root用户下面,执行用户的删除操作
- 删除用户,对应的用户目录也删除掉
userdel -r 用户名
查找用户
-
查询用户的详细信息 id 用户名
uid: 用户id gid:用户组id groups:组名
-
查看当前的用户的信息
who am i / whoami
02 用户组
用户组类似于角色,系统可以对有共性(权限)的多个用户进行统一管理。我们可以通过下面一幅图来理解组的概念。
- 创建、删除用户组
groupadd 组名
[root@xq100 ~]# groupadd gaibang #创建一个组
groupdel 组名
[root@xq100 ~]# groupdel gaibang #删除一个组
- 增加用户的时候,直接指定组名称
基本语法: useradd -g 用户组 用户名
[root@xq100 ~]# useradd -g gaibang guojing #创建用户指定组名称
[root@xq100 ~]# id guojing
uid=1002(guojing) gid=1002(gaibang) groups=1002(gaibang)
- 修改用户所在组
基本语法: usermod -g 用户组 用户名
[root@xq100 ~]# groupadd taohuadao #创建组 名称为taohuadao
[root@xq100 ~]# usermod -g taohuadao guojing #将用户guojing移动到taohuadao这个组里面去
[root@xq100 ~]# id guojing
uid=1002(guojing) gid=1003(taohuadao) groups=1003(taohuadao)
- 用户和组相关的文件
(1)/etc/passwd文件
用户的配置文件,记录用户的各种信息。
每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录shell
使用cat命令浏览这个文件: cat /etc/passwd
xq:x:1000:1000:xq:/home/xq:/bin/bash
kobe:x:1001:1001::/home/kobe:/bin/bash
guojing:x:1002:1003::/home/guojing:/bin/bash
(2)/etc/shadow文件
口令的配置文件,用户登录的时候需要口令(密码)。口令的验证都是通过这个shadow文件去验证的。
每行的含义:登录名:加密口令:最后一次修改的时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
xq:$6$O2FlTZ6TIC6rD2dZ$xQb7mhEuE10P4lodcj5OaGhU5FqrdO7FifH2VjSvwPouqzGLrtTdZLtG8L3l2AvnFQi47x0uRLYMt6LMGWHfc0::0:99999:7:::
kobe:$6$Ij/jhx8A$CYTNMbK0N0DQOIh6A6qQ0Ucnst6GcNTHeS1X4pca3MwXI1ntM0NWsA0/HfUZTrgZKzUPC5m0ZBhpiLG9ZZlrw.:19231:0:99999:7:::
guojing:!!:19231:0:99999:7:::
我们发现guojing这个用户没有加密口令,所以没有显示。我们给guojing这个用户设置密码就可以看到加密口令了。
guojing:$6$.AdhAmZA$gbKCNrwqHBZAot8DxqxrtA7a0uCtc07iKnQltVWdLAk20wLg/58eHF5Ude81Zoo8P.onVZbS0wh/acETjipEv1:19231:0:99999:7:::
(3)/etc/group文件
组的配置信息,记录linux包含的组的信息
每行含义:组名:口令:组标识号:组内用户列表
03 组权限
在linux中每个用户都必须属于一个组,不能独立于组外,在linux中每个文件有所有者,所在组,其他组的概念。默认情况下,谁创建了改文件,谁就是文件的所有者。
我们切换到/home目录下。以列表的形式查看文件:
- 修改文件所属的用户
当然,我们也可以修改文件所属的用户。我们可以使用chown名令实现修改。
touch apple.txt
ll
chown kobe apple.txt #将当前文件的所属用户变成kobe
ll
当某个用户创建了一个文件后,这个文件的所在组就是该用户的所在组。
创建一个组 groupadd monster
创建一个用户 fox并放入到monster组中 useradd -g monster fox
给fox设置密码 passwd fox
[root@xq100 home]# clear
[root@xq100 home]# groupadd monster
[root@xq100 home]# useradd -g monster fox
[root@xq100 home]# passwd fox
Changing password for user fox.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
注销当前root用户,使用fox用户登录。然后我们使用fox用户创建一个fox.txt的文件。
[fox@xq100 ~]$ pwd
/home/fox
[fox@xq100 ~]$ touch fox.txt
[fox@xq100 ~]$ ll
total 0
-rw-r--r--. 1 fox monster 0 Aug 28 17:39 fox.txt
- 修改文件所在的组
我们切换到root用户,修改fox.txt所在的组。将组monster变更到taohuadao这个组。
我们使用命令chgrp命令就可以实现。
[root@xq100 home]# cd fox
[root@xq100 fox]# ll
total 0
-rw-r--r--. 1 fox monster 0 Aug 28 17:39 fox.txt
[root@xq100 fox]# chgrp taohuadao fox.txt
[root@xq100 fox]# ll
total 0
-rw-r--r--. 1 fox taohuadao 0 Aug 28 17:39 fox.txt
- 修改用户所在的组
在root用户下面,我们也可以修改用户所在的组。前提是新的组一定是存在的。
改变用户所在的组: usermod -g 新组名 用户名
需求:将fox所属的组(monster)修改到taohuadao。
usermod -g taohuadao fox
[root@xq100 home]# id fox
uid=1003(fox) gid=1004(monster) groups=1004(monster)
[root@xq100 home]# usermod -g taohuadao fox
[root@xq100 home]# id fox
uid=1003(fox) gid=1003(taohuadao) groups=1003(taohuadao)
04 网络方面
01 三种连接
-
桥接模式:
在桥接模式下,虚拟机里面的网络地址必须和外部的网络地址保持在同一网段(也就是前三组数字必须是一样的)。这样linux操作系统才可以和外部的机器进行通信。但是如果用户人数太多,容易造成IP冲突。
-
NAT模式
在NAT模式下,虚拟机里面的网络可以不再和主机里面的网络保持在同一网段。但是主机里面会存在虚拟网卡(192.168.100.99),这个虚拟网卡的ip地址必须和linux里面的IP地址(192.168.100.88)在同一网段。这样linux就可以通过虚拟网卡和主机之间进行通信了。同时也可以通过主机的真实地址(192.168.0.50)和外部网络进行通信。这样的好处是可以避免造成IP冲突。
-
主机模式
就是linux系统的ip地址和主机的ip地址必须保持一致。
02 NAT的网络配置
指令: ip addr ping ip地址
接下来我们再看看我们vmnet8的ip地址和以太网的ip地址:
在windows操作系统里面使用ipconfig命令:
vmnet8的ip:
以太网的ip:
接下来我们来互相ping一下,看能否ping通。
在windows操作系统里面ping linux的ip地址:
我们发现可以ping通过,接下来我们在linux操作系统里面ping wmnet8的ip地址:
如果ping不同,就是windows防火墙的问题,我们关闭防火墙即可。
我们在linux操作系统里面也可以直接ping通以太网,说明linux和vmnet8之间是可以互通的。
由于以太网可以通过网关连接外部的互联网,所以我们通过linux操作系统可以连接外部的网络了。
1.14.2 linux网络配置的指令
- ipaddr 在linux查看ip地址
- ifconfig 在linux查看ip地址
- ping 是否ping通指定的ip地址
- ipconfig 在windows操作系统里面查看网络的ip地址
1.14.3 linux网络环境配置(固定ip的方式)
默认情况下,我们linux操作系统ip获取的方式是自动获取的方式,我们可以查看自己linux操作系统,看看ip的获取方式:
这种自动获取ip的方式不需要任何设置就可以实现,但是非常容易造成ip冲突,而且在公司里面,我们一般都会将linux操作系统的ip地址固定下来,所以接下来我们需要手动固定linux操作系统的ip地址。
- 第一步 编辑我们linux的网卡文件
这个网卡文件在/etc/sysconfig/network-scripts/ifcfg-ens33
打开这个文件,进行编辑
- 编辑网卡文件ifcfg-enss33
- 重启网络服务(systemctl restart network)或者重启系统(reboot)
1.14.4 设置主机名和host映射
为了方便记忆,我们可以给linux系统设置主机名,也可以根据需要修改主机名。
我们可以通过hostname查看主机名的名称。
也可以修改/etc/hostname指定主机名名称。注意,修改完成之后,需要重启linux系统才能生效。
思考:前面我们可以通过ping linux的ip地址能ping通linux。那么我们可不可以通过ping linux的主机名 来ping通linux呢,答案是不可以的。
所以我们需要将主机名称和ip地址进行映射,如何映射?我们需要修改windows的hosts文件。找到C:\Windows\System32\drivers\etc下面的hosts文件,进行相关的编辑:
192.168.10.130 xq100 # ip地址是linux的ip地址
我们如何在linux里面通过本机的主机名来ping通主机呢?我们需要编辑/etc/hosts文件:
192.168.10.1 DESKTOP-EKI0P48 # ip是vmnet8的ip地址 后面的是windows的主机名称
[root@xq100 ~]# vim /etc/hosts
[root@xq100 ~]# ping DESKTOP-EKI0P48
注意:如果ping不通,需要关闭windows的防火墙。
思考:为什么通过主机名(域名)就能找到对应的ip地址呢,接下来我们就分析一下主机名(域名)解析机制:
应用实例:用户在浏览器输入www.baidu.com 如何找到百度服务器地址的?
1、浏览器先检查浏览器缓存中有没有该域名解析ip地址,有就先调用这个ip完成域名解析。如果没有就检查DNS解析器缓存,如果有就直接返回ip完成解析。这两个缓存可以理解为本地解析器缓存。
2、如果本地解析器缓存没有找到对应的映射,再去检查系统中的hosts文件中有没有配置对应的域名ip映射,如果有,就完成域名解析。
3、如果本地DNS缓存和hosts文件中均没有找到对应的ip,则到DNS域名服务器完成域名解析。
4、如果公网的DNS域名解析器也没有完成域名解析,就返回资源找不到的信息。
05 虚拟机克隆
注意:克隆的时候,需要先关闭linux操作系统。
下面两种克隆虚拟机的方式:
方式1:直接拷贝一份安装好的虚拟机文件。
我们可以在已经安装的linux操作系统所在的目录上,直接复制 粘贴即可。安装linux操作系统的目录,我们直接复制,然后粘贴到指定的磁盘目录并重名即可。然后我们通过虚拟机打开后缀名为.vmx
方式2:使用vmware的克隆操作。
用vmware选择克隆 选择虚拟机中的当前状态 选择创建完整克隆
在选择克隆类型的时候,有两种。
第一种:创建链接克隆。这种克隆的方式占用的磁盘空间较小,克隆时间更快。本质上还是使用原来的linux操作系统,只是克隆了原linux操作系统的引用。
第二种:创建完整克隆。这种克隆的方式占用是磁盘空间较大,克隆时间比较慢,相当于把原来的linux操作系统复制了一份。一般我们选择完整克隆。
06 Linux运行级别
- linux操作系统运行的7种级别
关于linux的运行级别,一共有7种,我们给大家分别介绍一下:
0:关机
1:单用户(找回用户丢失的密码,可以使用单用户模式)
2:多用户状态但没有网络服务(一般很少用)
3:多用户状态但有网络服务(没有图形化界面,但是有网络,这种用的最多)
4:系统未使用,保留给用户(很少用)
5:图形界面
6:系统重启
常用的运行级别是3和5,我们也可以指定系统默认的运行级别。
切换运行级别的口令: init[0 1 2 3 4 5 6]
我们在linux操作系统(带有图形化界面的操作系统)输入init 3。此时linux操作系统就会以纯命令行模式启动
- 如何修改linux操作系统默认的运行级别
在centos7中,有一个文件/etc/inittab文件中,描述了运行级别的相关信息
07 帮助指令
- man 获得帮助信息
基本语法: man 命令名称(功能描述:获得指定命令的帮助信息)。
- help 获得shell内置命令的帮助信息
08 磁盘分区
01 分区与磁盘
- Linux 系统中的文件系统的总体结构是一定的:只有一个根目录,根目录下的目录结构独立且唯一(如 /boot、/dev、/bin、/etc 目录等都是唯一的),Linux 中的磁盘分区都是文件系统中的一部分。
- 计算机的硬盘可以有多个、磁盘上的分区也可以有多个。 但每个磁盘要想连接到 Linux 系统中,需要将分区“映射”到文件系统的某一个目录下,这样访问目录即可访问对应硬盘分区,这种映射称为“挂载”。
- 任何目录或其父目录都要挂载到硬盘的某个分区下。如需要将某一分区挂载到根目录下,Linux 系统才能正常工作。
- 某个分区所挂载的目录,称为此分区的挂载点。
- 磁盘的不同分区可以挂载到 Linux 文件系统的不同分区下,但不能同时挂载到一个相同的目录。
我们可以去查看一下具体的磁盘分区信息吗?我们可以使用lsblk命令来查看详细的磁盘分区信息:
[root@xq100 home]# lsblk
02 linux硬盘标识
Linux 硬盘有两种:IDE 硬盘 和 SCSI 硬盘
- 对于 IDE 硬盘:驱动器标识为:
hdx~hd表示分区所在设备的类型,这里hd= IDE 硬盘x为盘号,区分不同硬盘间的功能
| 标识 | 功能 |
|---|---|
| a | 基本盘 |
| b | 基本从属盘 |
| c | 辅助主盘 |
| d | 辅助从属盘 |
○ ~ 为分区号,区分同一硬盘上不同分区的功能
| 标识 | 功能 |
|---|---|
| 1-4 | 主分区 或 扩展分区 |
| 5 | 逻辑分区 |
- 对于 SCSI 硬盘:驱动器标识为:
sdx~sd表示分区所在设备的类型,这里sd= SCSI 硬盘x为盘号,区分不同硬盘间的功能(盘号功能标识同 IDE 硬盘 a代表第一块硬盘 b代表第二块硬盘c代表第三块硬盘 d代表第四块硬盘)~为分区号,区分同一硬盘上不同分区的功能(分区号功能标识同 IDE 硬盘)
我们也可以查看分区的详细信息:
[root@xq100 ~]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 xfs 72921afb-f2fa-4b12-9338-28b31d19d15a /boot
├─sda2 swap 6b47cbdc-9db2-4e27-9309-3898c51b3d5f [SWAP]
└─sda3 xfs 569b448b-1d35-47d6-929d-ad256d81d19d /
sr0 iso9660 CentOS 7 x86_64 2019-09-11-18-50-31-00
NAME:驱动器标识
FSTYPE:文件系统类型
LABLE:文件系统 LABLE
UUID:分区唯一标识符,格式化磁盘后,会给分区分配一个32位的唯一的字符串
MOUNTPOINT:挂载点
03 磁盘挂载的案例
需求:下面我们以增加一块硬盘来熟悉磁盘的相关指令,深入理解磁盘分区、卸载、挂载的概念。
- 新增硬盘
右键虚拟机,点击设置。选择硬件,点击添加,选择硬盘,使用SCSI,创建新虚拟磁盘,设置最大磁盘大小,并将虚拟磁盘拆分成多个文件。
我们重启系统
此时我们通过lsblk指令,我们可以查看到硬盘的详细信息:
- 给新增的硬盘分区
接下来,我们需要给这块硬盘进行分区操作(我们就分1个分区)。我们知道,linux会把设备映射成文件,并将文件保存在/dev目录下面。
我们可以查看:
接下来我们就进行分区的具体操作:
[root@xq100 ~]# fdisk /dev/sdb
接下来我们进行分区的细节设置:
接下来我们使用lsblk命令来查看分区的具体信息:
在/dev目录下面,也有对应的文件描述sdb1:
现在的分区可以挂载吗?不可以,因为我们的磁盘分区还没有格式化!
- 格式化磁盘分区
接下来,我们使用格式化命令来对磁盘分区进行格式化:
[root@xq100 ~]# mkfs -t ext4 /dev/sdb1 #格式化分区
[root@xq100 ~]# lsblk -f # 查看分区详细信息
- 挂载分区
接下来,我们要将分区进行挂载,挂载到哪里去,挂载到指定的目录下面。所以我们需要先创建一个目录。我们在根目录下面创建一个目录newdisk(当前我们可以在任意地方定义需要被挂载的目录,并不一定在根目录)。
[root@xq100 ~]# cd /
[root@xq100 /]# mkdir newdisk
[root@xq100 /]# mount /dev/sdb1 /newdisk/ # 将sdb1磁盘分区挂载到newdisk目录
[root@xq100 /]# lsblk -f
此时我们在查看磁盘分区情况:
如果我们不想让当前分区sdb1和newdisk目录挂载了。我们可以卸载分区:
命令: umount /dev/sdb1或者 umount newdisk
注意:用命令行挂载的方式重启后会失效!!!,也就是说这种挂载关系是临时的。
如果我们想实现永久挂载呢?我们可以通过修改/etc/fstab文件实现永久挂载。添加完成后,执行mount -a(或者reboot)即刻生效。
[root@xq100 /]# vim /etc/fstab
编辑如下:
然后保存并退出。
1.13.3 磁盘情况查询指令
- 查询整个磁盘占用情况
[root@xq100 ~]# df -h
- 查询指定目录的磁盘占用情况
比如我们想查看/opt/目录情况。
语法: du -h [目录]
| -s | 指定目录大小汇总 |
|---|---|
| -h | 带计量单位 |
| -a | 含文件 |
| --max-depth=1 | 子目录深度 |
| -c | 列出明细的同时,增加汇总值 |
[root@xq100 opt]# du -h --max-depth=1 /opt
0 /opt/rh
208M /opt/vmware-tools-distrib
277M /opt # 汇总opt目录下面的磁盘占用情况
汇总和含文件查询:
[root@xq100 opt]# du -hac --max-depth=1 /opt
0 /opt/rh
69M /opt/VMwareTools-10.0.0-2977863.tar.gz
208M /opt/vmware-tools-distrib
277M /opt
277M total
1.13.4 磁盘操作实用指令
- 统计/opt文件夹下文件的个数
[root@xq100 opt]# ll
total 69852
drwxr-xr-x. 2 root root 6 Oct 31 2018 rh
-rw-r--r--. 1 root root 71524872 Aug 12 2015 VMwareTools-10.0.0-2977863.tar.gz
drwxr-xr-x. 9 root root 175 Aug 12 2015 vmware-tools-distrib
[root@xq100 opt]# ls -l /opt | grep "^-" | wc -l # "^-" 以文件开头 wc -l 统计个数
1
- 统计/opt文件夹下目录的个数
[root@xq100 opt]# ls -l /opt | grep "^d" | wc -l # "^d" 以文件目录开头 wc -l 统计个数
2
- 统计/opt文件下的文件的个数,包括子文件夹下的
[root@xq100 opt]# ls -lR /opt | grep "^-" | wc -l # R 代表递归
3148
- 统计/opt文件夹下的目录的个数,包括子文件夹下的
[root@xq100 opt]# ls -lR /opt | grep "^d" | wc -l
853
- 以树状结构显示目录结构(如果没有tree,则使用 yum install tree 安装)
[root@xq100 opt]# tree /home
bash: tree: command not found... # 需要安装tree指令
[root@xq100 opt]# yum install tree
[root@xq100 opt]# tree /home # 以树状的形式展示目录结构
09 动态监控
top与ps命令一样,它们都用来显示正在执行的进程。top与ps最大的不同之处,在于top在执行一段时间可以更新正在运行的进程。
基本语法:
top [选项]
| 选项 | 功能 |
|---|---|
| -d秒数 | 指定top命令每隔几秒刷新,默认3秒 |
| -i | 使用top不显示任何闲置或者僵死的进程 |
| -p | 通过指定监控ID来仅仅监控某个进程的状态 |
1.17.1 top指令详解
我们执行top指令:
[root@xq100 ~]# top
我们发现进程信息会每3秒钟就刷新1次。
下面我们对这些重要的指标信息进行讲解:
top -21:34:06: top命令刷新进程的时间
up:系统运行的时长
user:当前linux系统上面的用户数
load average: 负载值(三个数字相加(0.04+0.07+0.18)除以3 的值>0.7说明负载值很大)
Tasks:总进程数
ruuning: 正在运行的进程数
sleeping:休眠的进程数
stopped:停止的进程数
zombie:僵死的进程数
%(CPU): CPU负载百分比 us:用户占用cpu百分比 sy:系统占用cpu百分比 id:空闲cpu百分比
Mem:描述内存占用情况 total:总共内存 free 空余内存 used:使用了的内存 buff/cache:缓存
Swap:描述交换区内存占用情况
1.17.2 top指令的交互操作
当我们输入top命令之后,我们可以按下面的字符来进行对应的交互操作。
交互操作说明:
| 操作 | 功能 |
|---|---|
| P | 以CPU使用率来排序,默认就是此项 |
| M | 以内存使用来排序 |
| N | 以PID排序 |
| q | 退出top |
应用实例:
1.监控特定用户,比如我们监控jack用户(前提是jack登录了)
先输入top指令,然后按小写的u,最后输入jack然后回车,查看执行的进程。
最后查看效果:
2.终止指定的进程,比如我们要结束jack登录
top:输入此命令,然后回车,查看执行的进程
k:然后输入要结束的进程ID号 回车之后输入9 强制删除。
接下来还要输入信号量:
此时我们发现jack没强制下线。
3.指定系统状态更新的时间(没隔10秒自动更新),默认是3秒
[root@xq100 ~]# top -d 10 # 每10秒刷新1次
1.17.3 监控网络状态
基本语法: netstat [选项]
选项说明 -an 按照一定的属性排列输出 -p 显示哪个进程在调用
[root@xq100 ~]# netstat -anp | more
Local Address:本机linux的ip地址
Foreign Address:外部的网络地址
tcp:网络协议
127.0.0.1 / 0.0.0.0: 当前linux机器的本地地址
631/25/6060....:应用程序监听的端口号
State: LISTEN 监听状态 ESTABLISHED:建立连接的状态
PID:应用程序的进程号 Program name: 应用程序的名称
如何理解Foreign Address呢?
我们可以通过一幅图来理解:
应用案例:
查看服务名称为sshd的服务信息。
[root@xq100 ~]# netstat -anp | grep sshd
03 一次性
01 系统安装
安装
客户机操作系统:Linux(红帽版本) + 虚拟机名称 + 位置
配置处理器数量都是1
配置虚拟机的内存默认
网络连接方式使用网络地址转换
磁盘--创建新虚拟磁盘 + 分配磁盘容量 + 将虚拟磁盘查分成多个文件 + 完成虚拟机配置向导
初始化
linux操作系统,我们一般设置3个分区。分别是boot分区,swap分区(交换分区:如果内存不够用,交换分区可以临时充当内存)还有根分区。以总容量20G为例,一般分区大小设置如下:
boot分区 1G
swap分区 2G
根分区 17G
02 帮助工具
Xshell7 远程使用终端
FileZilla 远程传输文件工具
03 root密码找回
- 进入到linux开机界面,然后按e键
- 按下e键然后进入另一个界面,找到以linux16开头的行数。在行的最后面输入:init=/bin/sh。
- 接着输入完成之后,直接按快捷键Ctrl + X 进入单用户模式
- 接着在光标闪烁的位置输入: mount -o remount,rw / 然后按回车键。
- 在新的一行最后面输入:passwd,然后按回车键。输入密码,然后再次输入确认密码(密码长度最好是8位以上,但不是必须的)。密码修改成功之后,会显示passwd .....的字样,说明密码修改成功。
- 接着在光标闪烁的位置输入: touch /.autorelabel(注意touch 与后面的/之间有空格)。完成后按回车。
- 接着在光标闪烁的位置继续输入:exec /sbin/init(注意exec 与后面的/之间有空格)。然后按回车键,等待系统自动修改密码(这个时间可能会有点长,请耐心等待)。完成后系统会自动重启,新的密码生效了。