韩顺平老师的Linux基础学习笔记 (下)

Linux学习笔记

前言:本系列笔记的参考由 2021韩顺平 一周学会Linux 总结而成,希望能给学习Linux的同学一些帮助。也感谢韩老师录制的视频给我带来了非常巨大的收获!

目录:


6. Linux 组管理

在Linux中的每个用户必须属于一个组,不能独立于组外。在Linux中每个文件有所有者、所在组、其它组的概念

  1. 所有者
  2. 所在组
  3. 其他组
  4. 改变用户所在的组
Drawing 2022-10-30 16.07.44.excalidraw

在 Linux中,每一个用户都要属于一个组

在 Linux 系统中,文件根据所有者及所有者所在的组分为三个概念

  1. 文件的所有者是谁。一般的,谁创建了这个文件,这个文件的所有者就是谁/可更改所有者
  2. 这个文件属于哪个组的,那么这个组中的用户对这个文件拥有一定的权限
  3. 对于 a.txt 这个文件来说,组2和组3就属于其他组,其他组的用户对 a.txt 也拥有一定的权限

以上就是 Linux 对于文件的管理机制

6.1 文件/目录 所有者

一般为文件的创建者,谁创建了该文件,就自然的成为该文件的所有者

查看文件的所有者
语法:ls -ahl

其中第三列就是所有者
image-20221030165548971

修改文件的所有者
语法:chown 用户名 文件名

-----使用root创建一个文件apple.txt,然后将其所有者修改成tom-----
[root@SanxCentOS7 home]# touch apple.txt
[root@SanxCentOS7 home]# ll
-rw-r--r--. 1 root     root        0 1030 16:58 apple.txt
[root@SanxCentOS7 home]# chown ben apple.txt 
[root@SanxCentOS7 home]# ll
-rw-r--r--. 1 ben      root        0 1030 16:58 apple.txt

6.2 组的创建

语法:groupadd 组名

-----创建一个组moster-----
[root@SanxCentOS7 home]# groupadd moster

-----创建一个用户fox,并放入到moster组中-----
[root@SanxCentOS7 home]# useradd -g moster fox
[root@SanxCentOS7 home]# id fox
uid=1004(fox) gid=1006(moster)=1006(moster)

6.3 文件/目录 所在组

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

查看文件/目录所在组
语法:ls -ahl

-----使用fox来创建一个文件,查看该文件-----
[fox@SanxCentOS7 ~]$ touch ok.txt
[fox@SanxCentOS7 ~]$ ls -ahl
-rw-r--r--. 1 fox  moster    0 1030 17:12 ok.txt
此时由于fox属于monster组,所以fox创建出来的文件所在组为monster

修改文件所在的组
语法:chgrp 组名 文件名

-----使用root用户创建文件orange.txt,查看当前这个文件属于哪个组,然后将这个文件所在组修改到fruit组-----
[root@SanxCentOS7 ~]# groupadd fruit
[root@SanxCentOS7 ~]# touch orange.txt
[root@SanxCentOS7 ~]# ls -ahl
-rw-r--r--.  1 root root    0 1030 17:19 orange.txt

[root@SanxCentOS7 ~]# chgrp fruit orange.txt 
[root@SanxCentOS7 ~]# ls -ahl
-rw-r--r--.  1 root fruit    0 1030 17:19 orange.txt

6.4 修改所在组

其他组

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

改变用户所在组

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

改变用户所在组

  1. usermod -g 新组名 用户名
  2. usermod -d 新目录名 用户名:改变该用户登录的初始目录
    特别说明:用户需要有进入到新目录的权限
-----将fox这个用户从原来所在组,修改到animal组-----
[root@SanxCentOS7 home]# id fox
uid=1004(fox) gid=1006(moster)=1006(moster)
[root@SanxCentOS7 ~]# usermod -g animal fox
[root@SanxCentOS7 ~]# id fox
uid=1004(fox) gid=1008(animal)=1008(animal)

6.5 rwx 权限

ls -l 中显示的内容如下:
-rw-r--r--. 1 root root   131 107 14:42 Hello.java
其中每个r开头及之后的2位为一组:- rw- r-- r--

权限实例:
-rw-r--r--. 1 root root   131 107 14:42 Hello.java						//普通文件
brw-rw----. 1 root disk      8,   0 1117 10:43 sda						//块设备
crw-------. 1 root root     10, 234 1117 10:43 btrfs-control				//字符设备
drwxr-xr-x. 3 root root          60 1117 10:43 bus						//目录
lrwxrwxrwx. 1 root root           3 1117 10:43 cdrom -> sr0				//快捷方式

其中我们把 -rw-r--r-- 这十位做一个说明:

  1. 第1位确定文件类型 ( d , - , l , c , b )
    - 是普通文件
    l 是链接,相当于 Windows 的快捷方式
    d 是目录,相当于 Windows 的文件夹
    c字符设备文件,比如鼠标、键盘
    b 是块设备,比如硬盘

  2. 第2~4位确定所有者(该文件的所有者)拥有该文件的权限——User

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

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

⭐rwx 权限详解
  • rwx作用到文件

    1. [r] 代表可读(Read):可以读取、查看
    2. [w] 代表可写(Write):可以修改,但是不代表可以删除该文件
      删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件
    3. [x] 代表可执行(Execute):可以被执行
  • rwx作用到目录

    1. [r] 代表可读(Read):可以读取、ls查看目录内容
    2. [w] 代表可写(Write):可以修改,对目录内可以 创建、删除、重命名目录
    3. [x] 代表可执行(Execute):可以进入该目录
文件及目录权限实例

ls -l 中显示的内容如下:
-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc

其中,第一个root代表root用户,第二个root代表文件所在组为root

  • 10 个字符确定不同用户能对文件干什么
    第一个字符代表文件类型:-、l、d、c、b
    其余字符每 3 个一组 (rwx)、读 ®、写(w)、执行(x)
    第一组 rwx :文件拥有者的权限是读、写和执行
    第二组 rw- :与文件拥有者同一组的用户的权限是读、写但不能执行
    第三组 r-- :不与文件拥有者同组的其他用户的权限是读不能写和执行

在Linux中,可用数字表示权限,上述权限可表示为:r=4、w=2、x=1,因此rwx=4+2+1=7

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

从左到右解析依次是:
第一组 rwx :文件拥有者的权限是读、写和执行
第二组 rw- :与文件拥有者同一组的用户的权限是读、写但不能执行
第三组 r-- :不与文件拥有者同组的其他用户的权限是读不能写和执行
1 如果是文件代表硬连接数,如果是目录代表子目录数
root 用户
root 组
1213 文件大小(字节),如果是文件夹,显示4096字节
Feb 2 09:39 最后修改日期
abc 文件名

6.6 修改权限 -chmod

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

  • 第一种方式:+ 、- 、= 变更权限
    u: 所有者(是指文件或者是目录的拥有者)
    q:所有组
    o:其他用户
    a:所有人 ( u、g、o的总和 )

基本语法:

chmod u=rwx,g=rx,o=x 文件/目录名
 1. u=rwx	代表给文件/目录的所有者赋予读写执行的权限
 2. g=rx	代表给文件/目录的所属组的所有用户赋予读执行权限
 3. o=x		代表给文件/目录的其他组的所有用户赋予执行权限

chmod o+w 文件/目录名
 1. o+w		代表给文件/目录的所有者赋予写的权限

chmod a-x 文件/目录名
 1. a-x		代表给文件/目录的所有者、所属组、其他人撤销执行的权限

案例:

1.给abc文件的所有者读写执行的权限,给所在组读执行权限,给其他组读执行权限
chmod u=rwx,g=rx,o=x abc

2.给abc文件的所有者除去执行的权限,增加组写的权限
chmod u-x,g+w abc

3.给abc文件的所有用户添加读的权限
chmod a+r abc

6.7 修改文件所有者 -chown

基本语法介绍

  1. chown newowner 文件/目录 改变所有者
  2. chown newowner:newgroup 文件/目录 改变所有者和所在组

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

案例演示:

-----将 /home/abc.txt文件的所有者修改成fox-----
核心命令:chown fox /home/abc.txt
[root@SanxCentOS7 home]# touch abc.txt
[root@SanxCentOS7 home]# ll
-rw-r--r--. 1 root     root        0 1120 14:53 abc.txt
[root@SanxCentOS7 home]# chown fox /home/abc.txt 
[root@SanxCentOS7 home]# ll
-rw-r--r--. 1 fox      root        0 1120 14:53 abc.txt

-----将 /home/test 目录下所有的文件和目录所有者都修改成fox-----
核心命令:chown -R fox /home/test
[root@SanxCentOS7 test]# touch {1..5}.txt
[root@SanxCentOS7 test]# ll
-rw-r--r--. 1 root root 0 1120 14:55 1.txt
-rw-r--r--. 1 root root 0 1120 14:55 2.txt
[root@SanxCentOS7 home]# ll
drwx------. 3 xiaohong xiaohong 4096 107 15:33 test

[root@SanxCentOS7 home]# chown -R fox /home/test/
[root@SanxCentOS7 home]# ll test/
-rw-r--r--. 1 fox root 0 1120 14:55 1.txt
-rw-r--r--. 1 fox root 0 1120 14:55 2.txt
[root@SanxCentOS7 home]# ll
drwx------. 3 fox  xiaohong 4096 1120 14:55 test

6.8 修改文件所在组 -chgrp

基本语法介绍:

  1. chgrp newgroup 文件/目录 改变所属组

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

案例演示:

-----将/home/abc.txt文件的所在组修改成shaolin-----
核心代码:chgrp shaolin /home/abc.txt
[root@SanxCentOS7 home]# ll
-rw-r--r--. 1 fox  root        0 1120 14:53 abc.txt

[root@SanxCentOS7 home]# groupadd shaolin
[root@SanxCentOS7 home]# chgrp shaolin /home/abc.txt 
[root@SanxCentOS7 home]# ll
-rw-r--r--. 1 fox  shaolin     0 1120 14:53 abc.txt

-----将/home/test目录下所有的文件和目录的所在组修改成shaolin-----
核心代码:chgrp -R shaolin /home/test
[root@SanxCentOS7 home]# ll
drwx------. 3 fox  xiaohong 4096 1120 14:55 test

[root@SanxCentOS7 home]# chgrp -R shaolin /home/test/
[root@SanxCentOS7 home]# ll
drwx------. 3 fox  shaolin 4096 1120 14:55 test

6.9 案例实践

1. 警察和土匪游戏

组:police、bandit
警察:jack、jerry
土匪:xh、xq

要求:

  1. 创建组

    groupadd police
    groupadd bandit
    
  2. 创建用户

    useradd -g police jack
    useradd -g police jerry
    useradd -g bandit xh
    useradd -g bandit xq
    
  3. jack创建一个文件,自己可以读写本组人可以读,其他组没有任何权限

    jack本人登录
    touch testFile.txt
    chmod u=rw,g=r testFile.txt
    也可以写chmod 640 testFile.txt
    
  4. jack修改该文件,让其他组人可以读,本组人可以读写

    chmod g=rw,o=r testFile.txt
    也可以写chmod 664 testFile.txt
    
  5. xh投靠警察,看看是否可以读写

    usermod -g police xh
    
2. 西游记
groupadd sx
groupadd yg

useradd -g sx tangseng
passwd 123
useradd -g sx shaseng
passwd 123
useradd -g yg wukong
passwd 123
useradd -g yg bajie
passwd 123

登录wukong su - wukong
touch monkey.java
vim monkey.java
i
class monkey {
    public static void main(String[] args) {
        System.out.println("i am monkey");
    }
}
:wq

chmod g+rw monkey.java
vim monkey.java
i
class monkey {
    public static void main(String[] args) {
        System.out.println("i am monkey");
        System.out.println("i am pig");
    }
}
:wq

usermod -g yg shaseng
su - shaseng
vim monkey.java
class monkey {
    public static void main(String[] args) {
        System.out.println("i am monkey");
        System.out.println("i am pig");
        System.out.println("我是沙僧,我是妖怪!");
    }
}
:wq

注意:如果家目录下的文件可以允许组的其他成员访问
	 但家目录如果没有访问权限的话是不能访问家目录下的文件的
	 一般的在这道题中,需要对悟空的所属组提权chmod g+r+w+x wk

7. Linux 定时任务调度

7.1 crond 任务调度

定时任务调度

crontab 进行定时任务的设置

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

任务调度分类:

  1. 系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等
  2. 个别用户工作:个别用户可能希望执行某些程序,比如对MySQL数据库的备份

基本语法:crontab [选项]

常用选项

选项作用
-e编辑 crontab 任务
-l查询 crontab 任务
-r删除当前用户所有的 crontab 任务

案例演示

设置任务调度文件:/etc/crontab
设置个人任务调度,执行 crondtab -e命令
接着输入任务到调度文件
如:*/1****ls -l /etc/ > /tmp/to.txt
意思就是每小时的每分钟执行 ls -l /etc/ > /tmp/to.txt命令

参数细节说明

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

7.2 crond 时间规则

特殊符号的说明

特殊符号含义
*代表任何时间。比如第一个 " * " 就代表一小时中每分钟都执行一次的意思
,代表不连续的时间。比如 “0 8,12,16 * * * 命令”,就代表在每天的8:00分、12:00分、16:00分都执行一次命令
-代表连续的时间范围。比如 “0 5 * * 1-6命令”,代表在周一到周六的凌晨5:00执行命令
*/n代表每隔多久执行一次。比如 “*/10 * * * * 命令”,代表每隔10分钟就执行一遍命令
image-20221121210707239

7.3 crond 任务实例

-----每隔1分钟,就将当前的日期信息,追加到/tmp/mydate文件中-----
crontab -e
i
*/1 * * * * date >> /tmp/mydate
esc
:wq

-----每隔1分钟,将当前日期和日历都追加到/home/mycal文件中-----
方案1:写两条指令
crontab -e
i
*/1 * * * * date >> /home/mycal
*/1 * * * * cal >> /home/mycal
esc
:wq

方案2:写shell脚本
vim /home/my.sh
i
date >> /tmp/mycal
cal >> /tmp/mycal
esc
:wq
crontab -e
i
*/1 * * * * /home/my.sh
esc
:wq

-----每天凌晨2:00将MySQL数据库testdb,备份到文件中-----
提示:mysqldump -u root -p密码 数据库 > /home/db.bak
crontab -e
i
0 2 * * * mysqldump -u root -p密码 testdb > /home/db.bak
esc
:wq

crond 相关指令

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

注意:在设置定时执行某个脚本的时候需要注意 该脚本文件的权限是否为可执行

7.4 at 定时任务

基本介绍:

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

  2. 默认情况下,atd守护进程每60秒检查作业队列

    有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业

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

  4. 在使用 at 命令的时候,一定要保证atd进程的启动,可以使用相关指令来查看
    ps -ef | grep atd检测atd进程是否运行

基本语法:at [选项] [时间]
Ctrl + D结束at命令的输入

at 命令选项
选项含义
-m当指定的任务被完成后,将给用户发送邮件,即使没有标准输出
-Iatq 的别名
-datrm 的别名
-v显示任务将被执行的时间
-c打印任务的内容到标准输出
-V显示版本信息
-q <队列>使用指定的队列
-f <文件>从指定文件读入任务而不是从标准输入读入
-t <时间参数>以时间参数的形式提交要运行的任务
at 时间选项

at 指定时间的方法:

  1. 接受在当天的 hh : mm ( 小时 : 分钟 ) 式的时间指定。假如该时间已过去,那么就放在第二天执行
    例如04:00

  2. 使用 midnight (深夜),noon (中午),teatime (饮茶时间,一般是下午4点) 等比较模糊的词语来指定时间

  3. 采用12小时计时制,即在时间后面加上AM (上午) 或 PM (下午) 来说明是上午还是下午。例如:12pm

  4. 指一命令执行的具体日期,指定格式为 month day(月 日) 或 mm/dd/yy (月 / 日 / 年) 或 dd.mm.yy
    (日.月.年) ,指定的日期必须跟在指定时间的后面。例如:04:00 2021-03-1

  5. 使用相对计时法。指定格式为:now + count time-units,now 就是当前时间,time-units 是时间单位
    这里能够是 minutes (分钟)、hours (小时)、days (天)、weeks (星期)。count 是时间的数量,几天、几小时
    例如:now + 5 minutes

  6. 直接使用 today (今天)、tomorrow (明天) 来指定完成命令的时间

at 实例

案例1:两天后的下午5点执行 /bin/ls /home
at 5pm + 2days
at> /bin/ls /home

案例2:atq命令来查看系统中没有执行的工作任务
atq

案例3:明天17点钟,输出时间到指定文件内 比如 /root/date100.log
at 5pm + tomorrow/1days
at> date > /root/date100.log

案例4:2分钟后,输出时间到指定文件内 比如 /root/date200.log
at now + 2 minutes
at> date > /root/date200.log

案例5:删除已经设置的任务,atrm 编号
atrm id

8. Linux 磁盘分区与挂载

8.1 磁盘分区机制

Linux磁盘分区与挂载

原理介绍:

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

硬盘说明:

  1. Linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘

  2. 对于 IDE硬盘,驱动器标识符为 “hdx~”
    其中 “hd” 表明分区所在设备的类型,这里是指IDE硬盘
    “x” 为盘号 ( a 为基本盘,b 为基本从属盘,c 为辅助主盘,d 为辅助从属盘)
    “~” 代表分区,前四个分区用数字1~4表示,他们是主分区或扩展分区,从5开始就是逻辑分区
    例:hda3 表示为第一个 IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个 IDE硬盘上的第二个主分区或扩展分区

  3. 对于 SCSI硬盘则标识为 “sdx~”,SCSI硬盘是用 “sd” 来表示分区所在设备的类型的,其余则和 IDE硬盘的表示方法一样

image-20230101165640884

查看所有设备挂载情况
命令:lsblklsblk -f

[root@SanxCentOS7 ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   35G  0 disk 
├─sda1   8:1    0  953M  0 part /boot
├─sda2   8:2    0  1.9G  0 part [SWAP]
└─sda3   8:3    0   30G  0 part /
sr0     11:0    1  4.4G  0 rom  /run/media/root/CentOS 7 x86_64

[root@SanxCentOS7 ~]# lsblk -f
NAME   FSTYPE  LABEL           UUID                                 MOUNTPOINT
sda                                                                 
├─sda1 ext4                    5b774ccf-2a9a-40fd-8c7d-1f1e1a6cea43 /boot
├─sda2 swap                    eceb6033-464d-4f8a-8658-5798834bb207 [SWAP]
└─sda3 ext4                    a1d5fbde-dd49-4508-b912-6cae553f7e53 /
sr0    iso9660 CentOS 7 x86_64 2020-11-04-11-36-43-00               /run/media/root/CentOS 7 x86_64

8.2 增加磁盘应用实例

添加硬盘的步骤:

1. 虚拟机添加磁盘

image-20230101170307293 image-20230101170429097

设置大小之后可以一直点下一步了


2. 分区

此时我们看到 磁盘sdb 目前还没有任何挂载信息
image-20230101170831486

分区命令:fdisk /dev/sdb

命令操作:

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

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

[root@SanxCentOS7 ~]# fdisk /dev/sdb 
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x898a51a7 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):m
命令操作
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-2097151,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-2097151,默认为 2097151):
将使用默认值 2097151
分区 1 已设置为 Linux 类型,大小设为 1023 MiB

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@SanxCentOS7 ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   35G  0 disk 
├─sda1   8:1    0  953M  0 part /boot
├─sda2   8:2    0  1.9G  0 part [SWAP]
└─sda3   8:3    0   30G  0 part /
sdb      8:16   0    1G  0 disk 
└─sdb1   8:17   0 1023M  0 part 
sr0     11:0    1  4.4G  0 rom   

3. 格式化

sdb1 没有 UUID (磁盘分区唯一标识符),说明没有格式化

[root@SanxCentOS7 ~]# lsblk -f
NAME   FSTYPE  LABEL           UUID                                 MOUNTPOINT
sda                                                                 
├─sda1 ext4                    5b774ccf-2a9a-40fd-8c7d-1f1e1a6cea43 /boot
├─sda2 swap                    eceb6033-464d-4f8a-8658-5798834bb207 [SWAP]
└─sda3 ext4                    a1d5fbde-dd49-4508-b912-6cae553f7e53 /
sdb                                                                 
└─sdb1                                                              
sr0    iso9660 CentOS 7 x86_64 2020-11-04-11-36-43-00  

格式化命令:mkfs -t ext4 /dev/sdb1,其中ext4是分区类型

[root@SanxCentOS7 ~]# mkfs -t ext4 /dev/sdb1
[root@SanxCentOS7 ~]# lsblk -f
NAME   FSTYPE  LABEL           UUID                                 MOUNTPOINT
sda                                                                 
├─sda1 ext4                    5b774ccf-2a9a-40fd-8c7d-1f1e1a6cea43 /boot
├─sda2 swap                    eceb6033-464d-4f8a-8658-5798834bb207 [SWAP]
└─sda3 ext4                    a1d5fbde-dd49-4508-b912-6cae553f7e53 /
sdb                                                                 
└─sdb1 ext4                    4a18776b-52f6-4575-94dc-b4e5652b8afd 
sr0    iso9660 CentOS 7 x86_64 2020-11-04-11-36-43-00               

4. 挂载

挂载:将一个分区与一个目录联系起来

挂载/卸载 语法:mount 设备名称 挂载目录 / umount 设备名称或挂载目录

例如:
mount /dev/sdb1 /newdisk
umount /dev/sdb1 或者 umount /newdisk

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

-----挂载-----
[root@SanxCentOS7 ~]# mkdir //newdisk

将分区sdb1挂载到根目录//newdisk下
[root@SanxCentOS7 ~]# mount /dev/sdb1 /newdisk
[root@SanxCentOS7 /]# lsblk -f
NAME   FSTYPE  LABEL           UUID                                 MOUNTPOINT
sda                                                                 
├─sda1 ext4                    5b774ccf-2a9a-40fd-8c7d-1f1e1a6cea43 /boot
├─sda2 swap                    eceb6033-464d-4f8a-8658-5798834bb207 [SWAP]
└─sda3 ext4                    a1d5fbde-dd49-4508-b912-6cae553f7e53 /
sdb                                                                 
└─sdb1 ext4                    4a18776b-52f6-4575-94dc-b4e5652b8afd /newdisk
sr0    iso9660 CentOS 7 x86_64 2020-11-04-11-36-43-00

-----卸载-----
[root@SanxCentOS7 /]# umount /dev/sdb1
[root@SanxCentOS7 /]# lsblk -f
NAME   FSTYPE  LABEL           UUID                                 MOUNTPOINT
sda                                                                 
├─sda1 ext4                    5b774ccf-2a9a-40fd-8c7d-1f1e1a6cea43 /boot
├─sda2 swap                    eceb6033-464d-4f8a-8658-5798834bb207 [SWAP]
└─sda3 ext4                    a1d5fbde-dd49-4508-b912-6cae553f7e53 /
sdb                                                                 
└─sdb1 ext4                    4a18776b-52f6-4575-94dc-b4e5652b8afd 
sr0    iso9660 CentOS 7 x86_64 2020-11-04-11-36-43-00

实现永久挂载

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

添加完成后,执行 mount -a 即刻生效

image-20230101174441300

8.3 磁盘情况查询

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

基本语法:df -h

image-20230101175015937

查询指定目录的磁盘占用情况

基本语法:du -h /目录

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

-s 指定目录占用大小汇总
-h 带计量单位
-a 含文件
--max-depth=1 子目录深度
-c 列出明细的同时,增加汇总值
-----示例:查询 /opt 目录的磁盘占用情况,深度为1-----
du -h --max-depth=1 /opt

[root@SanxCentOS7 ~]# du -h  --max-depth=1 /opt
4.0K	/opt/rh
8.0K	/opt
image-20230101175939461

8.4 磁盘实用指令

-----统计/opt文件夹下文件的个数-----
ls -l /opt | grep "^-" | wc -l

-----统计/opt文件夹下目录的个数-----
ls -l /opt | grep "^d" | wc -l

-----统计/opt文件夹下文件的个数,包括子文件夹里的-----
ls -lR /opt | grep "^-" | wc -l

-----统计/opt文件夹下目录的个数,包括子文件夹里的-----
ls -lR /opt | grep "^d" | wc -l

-----以树状显示目录结构-----
tree /home
注意:首次需要运行 yum install tree

在 grep 命令中,“^” 表示行首(即开头)。所以,“^-” 表示以 “-” 开头的行


9. Linux 网络配置

原理图:
Linux网络配置

查看网络配置指令:

  1. Windows下:CMD 中输入 ipconfig
  2. Linux下:终端中输入 ifconfig

测试主机之间网络连通性
基本语法:ping IP地址/域名,在Linux中可以使用CTRL+C停止ping操作

9.1 Linux 网络环境配置

方法1:自动获取

说明:登陆后,通过界面设置来自动获取IP
image-20230102163344755

特点:Linux启动后会自动获取IP
缺点:每次自动获取的IP地址可能会不一样

方法2:指定IP

说明:直接修改配置文件来指定IP,并可以连接到外部网络
编辑 vim /etc/sysconfig/network-scripts/ifcfg-ens33
要求:将IP地址配置为静态的,比如 192.168.200.130

# 网络类型(通常是Ehternet)
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
# IP的配置方法(none/static/bootp/dhcp)引导时 不使用协议|静态分配IP|BOOTP协议|DHCP协议
BOOTPROTO="dhcp"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
# 随机ID
UUID="924d41f5-8937-4d70-9997-a373bfd4e144"
DEVICE="ens33"
# 系统启动的时候网络接口是否有效(yes/no)
ONBOOT="yes"
需要在下方添加的有:
# IP地址
IPADDR=192.168.200.130
# 网关
GATEWAY=192.168.200.2
# 域名解析器
DNS1=192.168.200.2

虚拟机中配置完成后,还需要配置虚拟网络的地址

点击虚拟机左上角的编辑,找到 “虚拟网络编辑器”
image-20230102165620363 image-20230102165732145

9.2 设置主机名和Hosts映射

步骤:

  1. 设置主机名

    • 为了方便记忆,可以给Linux系统 设置主机名,也可以根据需要修改主机名
    • 指令 hostname 可以查看主机名
    • 修改文件在 /etc/hostname 指定
    • 修改后,重启生效
  2. 设置Host映射
    思考:如何通过主机名能够找到(比如ping)某个Linux系统?

    • Windows
      C:\Windows\System32\drivers\etc\hosts 文件指定即可
      案例:192.168.200.130 hspedu100
    • Linux
      /etc/hosts 文件指定
      案例:192.168.200.1 ThinkPad-PC

原理:主机名解析过程分析(Hosts、DNS)

  1. Hosts 是什么?
    一个文本文件,用来记录 IP 和 Hostname (主机名) 的映射关系
  2. DNS
    • DNS,就是 Domain Name System 的缩写,翻译过来就是域名系统
    • 是互联网上作为域名和IP地址相互映射的一个分布式数据库

示例:用户在浏览器中输入了 www.baidu.com

  1. 浏览器先检查浏览器缓存中有没有该域名解析IP地址,有就先调用这个IP完成解析;如果没有就检查操作系统DNS解析器缓存,如果有直接返回IP完成解析。这两个缓存,可以理解为 本地解析器缓存

  2. 一般来说,当电脑第一次成功访问某一网站后,在一定时间内,浏览器或操作系统会缓存它的IP地址 (DNS解析记录)
    如在 CMD窗口中输入

    ipconfig /displaydns	//DNS域名解析缓存
    ipconfig /flushdns		//手动清理DNS缓存
    
  3. 如果本地解析器缓存没有找到对应映射,检查系统中Hosts文件中有没有配置对应的域名IP映射,如果有,则完成解析并返回

  4. 如果本地DNS解析器缓存和Hosts文件中均没有找到对应的IP,则到域名服务DNS进行解析域

浏览器缓存
系统中的DNS缓存
Hosts文件域名映射的IP
DNS服务器进行解析

10. Linux 进程管理

基本介绍:

  1. 在 Linux 中,每个 执行的程序 都称为一个进程。每一个进程都分配一个ID号 (pid,进程号)

  2. 每个进程都可能以两种方式存在。前台后台
    前台进程就是用户目前的屏幕上可以进行操作的应用进程
    后台进程则是实际在操作,但是由于屏幕上无法看到的进程,通常使用后台的方式执行

  3. 一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,直到关机才结束

10.1 显示系统执行的进程

基本介绍:ps命令是用来查看目前系统中,有哪些进程正在执行,以及它们执行的状况。可以不加任何参数

ps 显示的信息选项:

字段说明
PID进程识别号
TTY终端机号
TIME此进程所消耗CPU时间
CMD正在执行的命令或进程名
image-20230105000958439

命令参数列表:

  1. ps -a:显示当前终端的所有进程信息
  2. ps -u:以用户的格式显示进程信息
  3. ps -x:显示后台进程运行的参数

ps 详解

  1. 指令:ps -aux | grep xxx,查看有没有 xxx 服务在运行

  2. 指令说明

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

10.2 父子进程

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

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

  1. -e:显示所有进程
  2. -f:全格式
    ps -ef | grep xxx
    image-20230105170317529

10.3 终止进程

基本介绍:若是某个进程执行到一半需要停止或是已经消耗了很多的系统资源时,此时可以考虑终止该进程。使用 kill 命令来完成

基本语法:

  1. kill 进程号(功能描述:通过进程号终止进程)
  2. killall 进程名称(功能描述:通过进程名称终止进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)

常用选项:

  • -9:表示强迫进程立即停止
-----案例1:踢掉某个非法登录的用户-----
ps -ef | grep sshd	# 查看进程sshd
kill 4162			# 终止非法用户远程登录

-----案例2:终止远程登录服务sshd,在适当的时候再次重启sshd服务-----
kill 1022			# 终止远程登录服务sshd
ps -ef | grep sshd	# 查看远程登录服务进程是否存在
/bin/systemctl start sshd.service	# 重启远程登录服务sshd
ps -ef | grep sshd	# 查看远程登录服务进程是否存在

-----案例3:终止多个gedit-----
killall gedit	# 终止多个gedit进程

-----案例4:强制终止一个终端-----
root       6826   6819  0 17:39 pts/3    00:00:00 bash
root       7093   6819  0 17:41 pts/4    00:00:00 bash
[root@SanxCentOS7 ~]# kill 6826		# 无法终止bash进程
[root@SanxCentOS7 ~]# kill -9  6826	# 强制终止bash进程

10.4 查看进程树 pstree

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

常用选项:

  1. -p:显示进程的PID
  2. -u:显示进程的所属用户

应用实例:

-----案例1:以树状的形式显示进程的PID-----
pstree -p

-----案例2:以树状的形式显示进程的用户ID-----
pstree -u

10.5 服务管理

基本介绍:

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

服务
1. Service 管理指令
  1. service 服务名 [start | stop | restart | reload | status]

  2. 在 CentOS7.0 后 很多服务不再使用service,而是 systemctl

  3. service 指令管理的服务在 /etc/init.d 查看
    image-20230105205917433

Service 管理指令案例:

-----请用service指令,查看、关闭、启动 network-----
注意:需要在虚拟系统演示,因为网络连接会关闭
service network status | stop | restart

查看服务名:

  1. 使用 setup → \rightarrow 系统服务 就可以看到全部的服务名,带 * 号的为开机自启动,退出按Tab
    image-20230105211238797 image-20230105211358875

  2. /etc/init.d 看到 service 指令管理的服务 ls -l /etc/init.d

2. Service 运行级别 (RunLevel)

Linux 系统有7种运行级别 (runlevel):最常用的是3和5

运行级别0:系统停机状态,系统默认运行级别不能为0,否则不能正常启动

运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登录

运行级别2:多用户状态(没有NFS),不支持网络

运行级别3:完全的多用户状态(有NFS),登录后进入控制台命令行模式

运行级别4:系统未使用,保留

运行级别5:X11控制台,登陆后进入图形GUI模式

运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

开机流程说明:

开机
BIOS
/boot
systemctl进程1
运行级别
运行级别对应的服务

CentOS 7后运行级别说明:

/etc/initab 进行了简化

multi-user.target: analogous to runlevel 3
graphical.target: analogous to runlevel 5

# 预览目前默认的运行级别
systemctl get-default

# 设置默认运行级别
systemctl set-default TARGET.target

5.1 指定运行级别

3. chkconfig 指令

基本介绍:

  1. 通过 chkconfig 命令可以给服务的各个运行级别设置 自启动/关闭
  2. chkconfig 指令管理的服务在 /etc/init.d 查看
  3. 注意:CentOS 7 后,很多服务 使用systemctl 管理

chkconfig 基本语法

  1. 查看服务 chkconfig --list [|grep xxx]
  2. chkconfig 服务名 --list
  3. chkconfig --level 5 服务名 on/off
-----对network服务进行各种操作-----
[root@SanxCentOS7 ~]# chkconfig --list

注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。 

      要列出 systemd 服务,请执行 'systemctl list-unit-files'。
      查看在具体 target 启用的服务请执行
      'systemctl list-dependencies [target]'。

netconsole     	0:关	1:关	2:关	3:关	4:关	5:关	6:关
network        	0:关	1:关	2:开	3:开	4:开	5:开	6:关

-----对network服务在运行级别3中关闭自启动-----
chkconfig --level 3 network off

使用细节:chkconfig 重新设置服务后自启动或关闭,需要重启机器 reboot

4. systemctl 管理指令

基本语法:systemctl [start | stop | restart | status] 服务名

systemctl 指令管理的服务在 /usr/lib/systemd/system 查看

systemctl 设置服务的自启动状态

  1. systemctl list-unit-files [| grep 服务名]:查看服务开机启动状态,grep 可以进行过滤
  2. systemctl enable 服务名:设置服务开机启动
  3. systemctl disable 服务名:关闭服务开机启动
  4. systemctl is-enable 服务名:服务名(查询某个服务是否是自启动)

注意:上面的指令都是针对运行级别3和5的自启动/关闭

-----查看当前防火墙的状况,关闭防火墙和重启防火墙-----
systemctl status firewalld
systemctl stop firewalld
systemctl restart firewalld

细节讨论

  1. 关闭或启用防火墙后,立即生效(telnet 测试某个端口即可)

    telnet Linux虚拟机的IP 某个服务对应的端口号
    注意:如果显示 "'telnet'不是内部或外部命令,也不是可运行的程序或批处理文件"
    	 那么需要在 "启用或关闭Windows功能" 里勾选Telnet客户端
    
  2. 这种方式只是临时生效,当重启系统后,还是回归以前对服务的设置

  3. 如果希望设置某个服务自启动或关闭永久生效,要使用 systemctl [enable | disable] 服务名
    firewall工作原理

5. 打开或关闭指定端口

在真正的生产环境往往需要防火墙打开,但是问题来了,如果我们把防火墙打开,那么外部请求数据包就不能跟服务器监听端口通讯,这时需要打开指定端口,比如80、22、8080等,那么如何操作呢?

firewall 指令

  1. 打开端口:firewall-cmd --permanent --add-port=端口号/协议
  2. 关闭端口:firewall-cmd --permanent --remove-port=端口号/协议
  3. 重新载入才能生效:firewall-cmd --reload
  4. 查询端口是否开放:firewall-cmd --query-port=端口号/协议
-----启用防火墙,测试111端口是否能telnet-----
不能
-----开放111端口-----
firewall-cmd --permanent --add-port=111/tcp
firewall-cmd --reload
firewall-cmd --query-port=111/tcp

-----再次关闭111端口-----
firewall-cmd --permanent --remove-port=111/tcp
firewall-cmd --reload
firewall-cmd --query-port=111/tcp
image-20230105225307518

10.6 动态监控系统

1. 动态监控进程

基本介绍:top与ps指令很相似,它们都用来显示正在执行的进程

top与ps最大的不同之处,在于top在执行一段时间后可以更新正在运行的进程

基本语法:top [选项]

选项说明:

选项功能
-d 秒数指定top命令每隔几秒更新,默认是3秒
-i使top不显示任何闲置或者僵尸进程
-p通过指定监控进程ID来仅仅监控某个进程的状态

僵尸进程:是指已经结束执行但是还没有被父进程回收的进程。在 Linux 系统中,当一个进程结束执行时,它会向其父进程发送一个信号,父进程收到信号后会回收该进程的资源。如果父进程在收到信号后并没有回收该进程的资源,那么该进程就会成为一个僵尸进程。僵尸进程不会占用 CPU 时间,但是会占用一些系统资源,如果系统中出现了大量僵尸进程,可能会导致系统资源不足

僵死进程:是指已经结束执行且父进程已经回收了其资源,但是该进程仍然存在于进程表中的进程。僵死进程不会占用 CPU 时间和系统资源,并且可以通过系统调用 wait() 来回收

image-20230105232049019
字段说明
23:01:27 up 1:28当前时间是23:01(晚上11点01分),系统已经运行了1小时28分钟
1 user目前有1个用户登录系统
load average: 0.00, 0.01, 0.05负载平均值是衡量系统CPU使用率的度量。这三个数字分别代表过去1分钟,5分钟和15分钟的负载平均值。负载平均值为0.00意味着没有进程在等待CPU时间
Tasks: 158 total系统总共有158个进程
1 running1个进程当前正在运行
155 sleeping155个进程正在等待某些事件发生(即睡眠)
2 stopped2个进程已被停止(即,它们已被信号停止)
0 zombie0个进程处于僵尸状态(即,它们已终止但其父进程尚未等待它们)
%Cpu(s): 0.2 us, 0.2 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st这显示了系统的CPU使用率。百分比表示以下内容
-us用于运行非内核代码(用户时间,包括nice时间)的时间
-sy用于运行内核代码(系统时间)的时间
-ni用于运行具有正nice值(低优先级)的代码的时间
-id空闲时间
-wa等待输入/输出(I/O)的时间
-hi处理硬件中断的时间
-si处理软件中断的时间
-st被虚拟机调度的时间(对于虚拟机内的操作系统)
KiB Mem: 2027896 total系统的物理内存(RAM)总量为2027896 KB
1144296 free目前有1144296 KB的内存没有被使用
493608 used目前有493608 KB的内存被使用
389992 buff/cache389992 KB的内存用于缓冲和缓存
KiB Swap: 1952764 total系统的交换空间总量为1952764 KB。当系统的物理内存很低时,就会使用交换空间
1952764 free目前有1952764 KB的交换空间没有被使用
0 used目前没有使用交换空间
1368680 avail Mem可用于使用的物理内存总量(即空闲内存加上buff/cache)为1368680 KB
2. 动态监控的交互操作

交互操作说明:

操作功能
P以CPU使用率排序,默认就是此项
M以内存的使用率排序
N以PID排序
q退出top
-----案例一:监视特定用户-----
top:输入此命令,按回车键,查看执行的进程
u:然后输入 "u" 回车,再输入用户名即可

-----案例二:终止指定进程-----
top:输入此命令,按回车键,查看执行的进程
k:然后输入 "k" 回车,再输入要结束的进程ID号
然后输入9,强制终止bash

-----案例三:指定系统状态更新的时间(每隔10秒自动更新)-----
top -d 10

10.7 监控网络状态 netstat

基本语法:netstat [选项]

选项说明:

  1. -an:按一定顺序排列输出
  2. -p:显示哪个进程在调用
Linux端口状态
-----查看服务名为sshd的服务信息-----
netstat -anp | grep sshd
image-20230106174904998

检测主机连接命令ping:是一种网络检测工具,它主要是用检测远程主机是否正常,或是两部主机间的网线或网卡故障

如:ping 对方的ip地址


11. RPM 与 YUM

基本介绍:RPM 用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有 .RPM 扩展名的文件

RPM 是 RedHat Package Manager (RedHat 软件包管理工具) 的缩写,类似 Windows 的 setup.exe,这一文件格式名称虽然打上了 RedHat 的标志,但理念是通用的

Linux 的分发版本都有采用 (SUSE, RedHat, CentOS 等等),可以算是公认的行业标准了

11.1 RPM 包的管理

RPM包的简单查询指令

  1. 查询已安装的 RPM 列表:rpm -qa | grep xxx
    如:rpm -qa | grep firefox

RPM 包名基本格式:

  • 一个 RPM 包名:firefox-68.10.0-1.el7.centos.x86_64
    1. 名称:firefox
    2. 版本号:68.10.0-1
    3. 适用操作系统:el7.centos.x86_64,表示 CentOS 7.x 的64位系统
      如果是 i686、i386 表示32位系统,noarch 表示通用

RPM 包的其他指令:

# 查询所安装的所有RPM软件包
rpm -qa
rpm -qa | more
rpm -qa | grep xxx		# 示例: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

11.2 RPM 包的安装与卸载

安装的基本语法:rpm -ivh RPM包全路径名称
卸载的基本语法:rpm -e RPM包的名称

# 安装firefox 软件包
rpm -ivh firefox RPM包的路径

# 删除 firefox 软件包
rpm -e firefox

细节讨论

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

    如:$ rpm -e foo
    removing these packages would break dependencies:foo is needed by bar-1.0-1
    
  2. 如果我们一定要删除 foo 这个RPM包,可以添加参数 --nodeps 就可以强制删除,但是一般不推荐这样做,因为依赖于该软件包的程序可能无法运行

    $ rpm -e --nodeps foo
    

11.3 YUM

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

yum下载软件包

YUM 的基本指令:

# 查询yum服务器是否有需要安装的软件
yum list | grep xxx(软件列表)

# 安装指定的yum包
yum install xxx  #下载安装
-----案例:请使用yum的方式来安装firefox-----
rpm -e firefox
rpm -q firefox
yum list | grep firefox
yum install firefox
rpm -q firefox
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值