Linux初级指令使用

96 阅读1小时+

个人信息

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的总和)

案例演示:

  1. 给/home/Hello.java所有者读写执行的权限,给所在组执行读执行的权限,给其他组读执行的权限
[root@xq100 kobe]# chmod u=rwx,g=rx,o=rx Hello.java 
  1. 给/home/Hello.java文件的所有者去除执行的权限,增加组写的权限
[root@xq100 kobe]# chmod u-x,g+w Hello.java 
  1. 给/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命令进行定时任务调度的设置。何为任务调度?

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

任务调度的分类:

  1. 系统任务:有些重要的工作必须周而复始的执行 比如病毒扫描 。
  2. 个别用户工作: 个别用户希望执行某些程序,比如对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任务调度

一次性工作队列

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

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

  3. at命令是一次性定制的计划任务,执行完一个任务后就不再执行此任务了。

  4. 在使用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
日期:MMDDYYMM/DD/YYMM.DD.YY
在 2018 年 1 月 15 日执行:
01151801/15/1801.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

选择系统服务,回车,我们可以看到系统服务的详细信息:

注意:

  1. [*] 代表这些系统服务会随着开机自启动而启动
  2. 如果我们想去掉星号或者加上星号,上下按键切换到对应的服务按空格键即可。
  3. 使用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

    就是重启系统

注意细节:

  1. 不管是重启系统还是关闭系统,首先要运行sync命令,把内存中的数据写入到磁盘中。
  2. 目前的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 分区与磁盘

  1. Linux 系统中的文件系统的总体结构是一定的:只有一个根目录,根目录下的目录结构独立且唯一(如 /boot、/dev、/bin、/etc 目录等都是唯一的),Linux 中的磁盘分区都是文件系统中的一部分。
  2. 计算机的硬盘可以有多个、磁盘上的分区也可以有多个。 但每个磁盘要想连接到 Linux 系统中,需要将分区“映射”到文件系统的某一个目录下,这样访问目录即可访问对应硬盘分区,这种映射称为“挂载”。
  3. 任何目录或其父目录都要挂载到硬盘的某个分区下。如需要将某一分区挂载到根目录下,Linux 系统才能正常工作。
  4. 某个分区所挂载的目录,称为此分区的挂载点。
  5. 磁盘的不同分区可以挂载到 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 与后面的/之间有空格)。然后按回车键,等待系统自动修改密码(这个时间可能会有点长,请耐心等待)。完成后系统会自动重启,新的密码生效了。