10 -- 组管理和权限管理
10.1 Linux组基本介绍
Linux中的每个用户必须属于一个组,不能独立于组外。在Linux中每个文件有所有者、所在组、其他组的概念
10.1.1 文件/目录 所有者
一般为文件的创建者,谁创建了该文件,就自然的成为该文件的所有者
ls -ahl (查看文件的所有者)
chown 用户名 文件名 (修改文件的所有者)
10.1.2 组的创建
groupadd 组名
10.1.3 文件/目录 所在组
当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组
ls -ahl (查看文件/目录所在组)
chgrp 组名 文件名 (修改文件所在组)
10.1.4 其他组
除文件的所有者和所在组的用户外,系统的其他用户都是其他组
改变用户所在的组 usermod
要用root用户,否则权限不够
usermod -g 新组名 用户名
usermod -d 目录名 用户名 改变该用户登录的初始目录 //用户要有进入新目录的权限
10.2 权限
10.2.1 权限的基本介绍
举例说明 --> ls -l 中显示的内容如下:-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc
(第一个root是abc这个文件的所有者 -- 用户;第二个root是abc的所在组 -- 组)
“-rwxrw-r--”
0~9 位说明
1. 第0位确定文件类型(d, -, l, c, b)
l是链接,相当于windows 的快捷方式
d是目录,相当于windows 的文件夹
c是字符设备文件,鼠标,键盘
d是块设备,比如硬盘
-是代表普通文件
2. 第1-3位确定所有者(该文件的所有者)拥有该文件的权限 -- user
3. 第4-6位确定所属组(同用户组的)拥有该文件的权限 -- group
4. 第7-9位确定其他用户拥有该用户的权限
10.2.2 rwx权限详解
rwx作用到文件
[r] -- 可读read:可以读取,查看
[w] -- 可写write:可以修改,但是不代表可以删除文件,删除文件的前提是对该文件所在目录有写权限,才能删除该文件
[x] -- 可执行execute:可以被执行
rwx作用到目录
[r] -- 可读read:可以读取,ls查看目录内容
[w] -- 可写write:可以修改,对目录内创建+删除+重命名目录
[x] -- 可执行execute:可以进入该目录
可以用数字表示权限
r = 4;w = 2;x = 1;则rwx = 7;
10.2.3 文件及目录权限实际案例
10.3 修改
10.3.1 修改权限-chmod
通过chomd指令,可以修改文件或目录的权限
方式一:+、-、=变更权限
u:所有者;g:所有组;o:其他人;a:所有人;
+:增加权限; -:减少权限; =:赋予权限
方式二:通过数字变更权限
r = 4;w = 2;x = 1;
e.g. chmod 751 文件目录名
10.3.2 修改文件所有者-chown
chown newowner 文件/目录 (改变所有者)
chown newowner:newgroup 文件/目录 (改变所有者和所在组)
-R 如果是目录,则使其下所有自文件或目录递归生效
10.3.3 修改文件/目录所在的组-chgrp
chgrp newgroup 文件/目录 (改变所在组)
10.4 实例
10.1 警察和土匪游戏
11 -- 定时任务调度
11.1 crond任务调度
11.1.1 基本介绍
crontab 进行 定时任务的设置 -- 周期性的
任务调度是指系统在某个时间执行的特定的命令或程序
11.1.2 任务调度分类
1. 工作系统:有些重要的工作必须周而复始的执行。如病毒扫描等
2.个别用户工作:个别用户可能希望执行某些程序。比如对mysql数据库的备份
11.1.2 基本语法crontab
crontab [选项] //常用选项:
11.1.3 快速入门
特殊符号说明:
案例:
11.2 at定时任务
11.2.1 基本介绍
at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行
默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业
at命令是一次性定时计划任务,执行完一个任务后不再执行此任务了
在使用at命令的时候,一定要保证atd进程的启动,可以用相关指令来查看
ps -ef
-->检测当前运行的所有指令
ps -ef | grep atd
-->过滤含有atd关键词,检测atd是否在运行

11.2.2 命令格式
at [选项] [时间] ctrl+D 结束at命令的输入
ctrl+D要输入两次
11.2.3 at命令选项
11.2.4 at时间定义
11.2.5 at任务调度案例 
12 -- Linux磁盘分区、挂载
12.1 Linux分区
12.1.1 原理介绍
Linux无论有几个分区,分给哪一个目录,归根结底只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分
Linux采用了一种叫“载入”的处理方法,它的整个文件系统包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得
12.1.2 查看所有设备挂载情况
lsblk 或 lsblk -f
12.1.3 硬盘说明
Linux硬盘分 IDE硬盘 和 SCSI硬盘,目前基本是SCSI硬盘
*12.1.4 挂载经典案例:增加磁盘应用
如何添加一块硬盘:
1.创建一个硬盘(打开虚拟机的“我的计算机”的“设置”,在设备中添加一个硬盘)(要重启系统才能识别)
2.分区
输入fdisk /dev/sdb;再输入命令n获取帮助(也可以不查看);输入n(new partition);再选择p(primary主分区)或者e(extended扩展分区);再输入分区号(输入几就会创建几个分区);最后输入w写入分区并退出 ,若不想保存则输入q
3.格式化硬盘
4.挂载 mount
卸载umount
但是用命令行挂载系统重启后,挂载将会失效
永久挂载的方法
通过修改/etc/fstab实现挂载(vim /etc/fstab)
添加完成后执行mount -a即刻生效
12.2 磁盘情况查询
12.2.1 查询系统整体磁盘的使用情况
df -h
当磁盘使用率达到80%以上时,需要清理空间或增加相应硬盘
12.2.2 查询指定目录的磁盘占用情况
先进入该目录 : cd /目录
du -h /目录
查询指定目录的磁盘占用情况,默认为当前目录
e.g. du -hac --max-depth=1 /opt
12.3 磁盘实用指令
12.3.1 统计某文件夹下文件的个数
统计/opt文件夹下文件的个数:
ls -l /opt | grep "^-" | wc -l
ls -l /opt --> 把opt目录下的文件和目录显示出来;
| grep "^-" --> 挑选出以“-”开头的文件
wc -l --> 用来统计数据word count
12.3.2 统计文件夹中文件的个数,包括子文件夹里的
统计/opt文件夹下文件的个数,包括子文件夹里的:
ls -lR /opt | grep "^-" | wc -l
-R 是递归
12.3.3 统计文件夹下目录的个数,包括子文件夹里的
统计/opt文件夹下目录的个数,包括子文件夹里的:
ls -lR /opt | grep "^d" | wc -l
12.3.4 以树状显示目录结构
如果没有tree,则使用yum install tree 安装(centos用yum或者dnf,ubuntu用apt-get或apt)
tree /opt
13 -- 网络配置
13.1 Linux网络配置原理图
13.2 查看网络IP和网关
13.2.1 查看虚拟网络编辑器和修改IP地址
查看网关:
查看windows环境中VMnet8网络配置:
ipconfig指令
查看Linux的网络配置:
ifconfig指令
13.2.2 ping测试主机之间网络连通性
基本语法:
ping 目的主机(功能描述:测试当前服务器是否可以连接目的主机)
13.3 Linux网络环境配置
第一种 -- 自动获取
登录后,通过界面的来设置自动获取ip,特点:Linux启动后会自动获取ip,缺点是每次自动获取的ip地址可能不一样
第二种 -- 指定ip
直接修改配置文件来制定ip,并可以连接到外网
vi /etc/sysconfig/network-scripts/ifcfg-ens33
重启网络服务或者重启系统生效:
service network restart 或者 reboot
要求:将ip地址配置成静态的,比如:ip地址为192.168.200.130
--> ifcfg-ens33文件说明
13.3 设置主机名和hosts映射
13.3.1 设置主机名
为了方便记忆,可以给Linux系统设置主机名,也可以根据需求修改主机名
hostname --> 查看主机名
修改文件在 /etc/hostname指定:
vim /etc/hostname
修改后 ,重启生效
13.3.2 设置hosts映射
通过主机名找到(比如,ping)某个系统
windows下:
在C:\Windows\System32\drivers\etc\hosts 文件指定即可
打开hosts文件在尾部添加ip地址和主机名(如:192.168.200.130 soki100)
Linux下:
vim /etc/hosts
增加ip地址和主机名(我用的是192.168.200.1 computer)
主机名解析过程分析(Host、DNS)
hosts -- 一个文本文件,用来记录 IP 和 Hostname(主机名)的映射关系
DNS -- 域名系统(Domain Name System),是互联网上作为域名和IP地址相互映射的一个分布式数据库
14* -- 进程管理
14.1 基本介绍
在Linux中,每个执行的程序都称为一个进程。每个进程都分配个ID号(pid,进程号)
每个进程都可能以两种方式存在。前台和后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程就是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行
一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才结束
14.2 显示系统执行的进程
14.2.1 基本介绍
ps指令是用来查看目前系统中,有哪些正在执行,以及它们执行的情况。可以不加任何参数
一般-aux组合使用
14.2.2 父子进程
14.2.3 终止进程kill和killall
若是某个进程执行到一半需要停止时,或是已消耗了很大的系统资源时,此时可以考虑停止该进程。使用kill命令完成此任务:
kill [选项] 进程号 -->通过进程号杀死/终止进程
killall 进程名称 -->通过进程名称杀死进程
killall杀死/终止进程也支持通配符,这在系统因负载过大而变得很慢时很有用
通过killall终止进程时,该进程的所有子进程都会被杀掉
常用选项:
-9 :表示 强迫进程立刻停止
案例:
14.3 查看进程树pstree
基本语法:
pstree [选项] --> 更加直观的来看进程信息
常用选项:
-p -->显示进程的PID
-u -->显示进程的所属用户
14.4 服务(service)管理
14.4.1 基本介绍
服务(service)本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其他程序的请求(如mysqld,ssd,防火墙等),因此又称为守护进程
service管理指令:
service 服务名 [start | stop | restart | reload | status]
在centos7.0后,很多服务不再使用service,而是systemctl
service指令管理的服务在 /etc/init.d 查看
查看服务名:
1)使用setup
进入-> 系统服务,就可以看到全部(输入setup,进入一个界面,可以按回车进行选择(按tab可以退出选择取消))
2)/etc/init.d 查看service指令管理的服务
ls -l /etc/init.d
14.4.2 服务的运行级别
centos7后运行级别说明:
在 /etc/initab 进行了化简,如下:
multi-user.target: analogous to runlevel 3
graphical.target: analogous to runlevel 5
systemctl set-default --> 查看当前运行级别
systemctl set-default TARGET.target --> 设置新的运行级别
14.4.5 chkconfig指令
通过chkconfig命令给服务的各个运行级别设置自启动/关闭
chkconfig指令管理的服务在 /etc/init.d 查看
centos7.0后,很多服务使用systemctl管理
基本语法:
chkconfig --list [grep xxx] --> 查看服务
chkconfig 服务名 --list
chkconfig -- level 5 服务名 on/off (某个服务在某个level(此处是5)是自启动还是关闭)
chkconfig重新设置服务后自启动或关闭,需要重启机器reboot生效
14.4.6 systemctl管理指令
systemtcl [start | stop | restart | status] 服务名
systemctl指令管理的服务在 /usr/lib/systemd/system 查看:
ls -l /usr/lib/systemd/system
kill是关闭进程,service stop是停止服务
systemctl设置服务的自启动状态:
systemctl list-unit-files [ | grep 服务名]
查看服务开机启动状态,grep可以进行过滤
希望设置某个服务自启动或关闭永久生效:
systemctl enable 服务名 --> 设置服务开机启动
systemctl disable 服务名 --> 关闭服务开机启动
systemctl is-enabled 服务名 -->查询某个服务是否开机自启动
都是默认在3和5级别下的自启动/关闭管理
细节:
关闭或启用防火墙后,立即生效。[telnet测试 某个端口即可]
这种方式只是临时生效,当重启系统后,还是回归以前对服务的设置
如果希望设置某个服务自启动或关闭永久生效,要使用systemctl [enable|disable] 服务名
14.4.7 打开或者关闭指定端口
firewall指令
打开端口:firewall-cmd --permanent --add-port=端口号/协议
关闭端口:firewall-cmd --pernament --remove-port=端口号/协议
重新输入才能生效:firewall-cmd --reload
查询端口是否开放:firewall-cmd --query-port=端口号/协议
案例:
14.5 动态监控进程
top和ps命令很相似,都用来显示正在执行的进程;最大的不同之处在于top在执行一段时间可以更新正在执行的进程
top [选项]
选项说明:
交互操作说明:
14.6 监控网络状态
14.6.1 查看系统网络情况netstat
netstat [选项]
选项说明 -->
案例分析:
输入 netstat -an 后,弹出部分内容如左图所示:其中local address是本地地址,含有Linux的地址和监听的端口号;foreign address是外部地址,若连接也会显示IP地址和端口号
检测主机连接命令ping:是一种网络监测工具,它主要是用检测远程主机是否正常,或者两部主机间的网线或网卡故障。如:ping 对方ip地址
15 -- RPN 与 YUM
15.1 rpm包的管理
rpm用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,类似Windows的setup.exe,这一文件格式虽然是打上了RedHat的标志,但是理念是通用的
15.1.1 rpm包查询
rpm -qa | grep xx --> 查询已安装的rpm列表
一个rpm包名基本格式

rpm包的其他查询指令
15.1.2 rpm包的管理
卸载:
rpm -e RPM包的名称(不用加版本号之类的)
安装:
rpm -ivh RPM包全路径名称
i --> install 安装; v --> verbose 提示; h --> hash 进度条
15.2 YUM包的管理
yum是一个shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包
15.2.1 yum的基本指令
查询yum服务器是否有需要安装的软件:
yum list | grep xx软件列表 --> 查询
安装指定的yum包
yum install xxx --> 下载安装