二、Linux初级工程师
1、Linux用户与组
Linux用户和组
Linux是一个多用户系统, Linux允许使用者在Linux系统上通过规划不同类型、不同层级的用户, 并公平地分配系统资源与工作环境。不仅如此,和Windows不同的是, Linux允许不同的用户同时登录主机, 同时使用主机的资源, 因此Linux被称为是多用户系统。
Linux以“用户与用户组”的概念, 建立用户与文件权限之间的联系, 保证系统能够充分考虑每个用户的隐私保护, 很大程度上保障了Linux作为多用户系统的可行性。
root用户
root用户在Linux计算机中拥有全部权限。
·在Linux中执行涉及到系统的命令一般都需要root权限, 尤其是影响系统文件的命令。
·由于root权限如此强大,所以建议只有必要时才使用, 而不是直接以root用户身份进行登录。这样可以避免重要系统文件意外受损。·使用root用户创建新的用户, 并授予必要的权限, 在日常工作中使用对应的普通用户进行工作
系统用户
除了日常操作的用户以外,还会有一些其他用户,这些用户默认无法登陆系统。·这些用户的存在主要是为了满足系统进程对文件属主的需求。
用户组
在Linux中可以创建用户组来管理用户
根据功能分类,可以分为:管理员组和普通用户组
按类别分类,可以分为:基本组和附加组,一个用户只能有一个基本组,但可以有多个附加组·按组本身的类别分类:公共组和私有组。私有组只有一个用户,且组名和用户名一致;公共组会有多个用户
2、Linux权限构成
·Linux下权限可以分为三类: User权限(u) 、Group权限(g) 、Other权限(o)
·User权限表示文件所有者;
·Group权限表示文件所有者所在的组
·Other表示所有其他用户
who | 用户类型 | 说明 |
---|---|---|
u | user | 文件所有者 |
g | group | 文件所有者所在组 |
o | others | 所有其他用户 |
a | all | 所用用户, 相当于ugo |
– | – | – |
Linux权限分类
·Linux将权限分为Read (读)、Write(写)、Execute(执行) 三个不同的基本类别
·Read读权限表示:
·针对目录,有读®权限就代表能对此目录有列表功能,就是可以执行Is命令进行查看,另外还有cp的功能。针对文件,有读®权限就代表能对此文件有阅读功能, 可以通过cat等命令查看文件内容。
·Write写权限表示:
·针对目录, 有写(w) 权限就代表着在此目录下创建文件和目录, 可以通过touch,mkdir等命令创建文件和目录, 另外还可以删除此目录下的文件。针对文件,有写(w)权限就代表着对此文件可以写入新的内容和修改文件内容。
·Execute执行权限表示:
·针对目录,有执行(x)权限就代表能进入此目录,利用cd等命令进入此目录针对文件,有执行(x)权限就代表可以执行此文件。
3、文件与文件夹权限
文件和文件夹权限
在Linux中, 可以使用umask查看当前用户的默认权限, 创建文件/目录时会遵循该权限文件夹权限和文件权限的不同,会导致在使用命令操作文件时,有所不同。
文件权限
·对于文件而言
-r表示文件的内容可以被读取
-w表示这个文件的内容可以被修改。(W只授予文件修改的权限,如果需要删除/重命名,则需要有目录的w权限)·
-x代表文件可以被执行,一般情况下,.sh文件需要有这个权限。
修改文件权限
示例
文件的属主和属组
chown命令可以修改文件的属主
chown[-cfhvR]user[:gi roup]file …
·-c:显示更改的部分的信息
user :新的文件拥有者的使用者ID
·-f:忽略错误信息
group :新的文件拥有者的使用者组(group )·-h:修复符号链接
·-v:显示详细的处理信息
·-R:处理指定目录以及其子目录下的所有文件
示例
4、特殊权限
suid
SUID是SetUID的简称, 它会出现在文件拥有者权限的执行位上, 具有这种权限的文件会在其执行时, 使调用者暂时获得该文件拥有者的权限
示例
SUID的使用需要满足以下四点
·1.SUID只对二进制文件有效
·2.调用者对该文件有执行权
·3.在执行过程中,调用者会暂时获得该文件的所有者权限4.该权限只在程序执行的过程中有效
SGID
SGID是SetGID的简称, 它出现在文件所属组权限的执行位上面, 它对普通二进制文件和目录都有效。SGID作用于文件上时,在执行该文件时,用户将获得该属组的权限;
SGID作用于目录上时,在该目录下创建的文件, 都将属于这个目录所属的组。
sbit
如何设置SUID、SGID、S BIT
数字方式
·SUID、SGID、S BIT有自己对应的权限数字
·SUID-> 4
·SGID-> 2
·S BIT-> 1
·设定权限只需要将对应的权限数字相加即可
·在设置权限时,需要将特殊权限数字放在最前面,如果原文件权限为
755, 需要添加SUID权限时, 就执行命令chmod4755 filename
命令方式
·chmod u+s test file#为test file文件加上SUID权限。
·chmod g+s testdir#为testdir目录加上SGID权限。
·chmod o+t testdir#为testdir目录加上S BIT权限。
Linxu系统管理进阶
(1)Linux下的init进程
init进程的职责
对于Linux系统的运行来说,init程序是最基本的程序之一。
一个好的Linux发行版本通常随带有一个in it的配置, 这个配置适合于绝大多数系统的工作, 在这样一些系统上不需要对in it做任何事。·通常, 只有你在碰到诸如串行终端挂住了、拨入(不是拨出) 调制解调器、或者你希望改变缺省的运行级别时你才需要关心in it。·In it进程是所有Linux进程的父进程, 它的进程号为1
Init进程的实现
OpenRC:OpenRC是一个基于依赖的init系统, 它用C语言和遵循POSIX的shell写成, 这使得它在BSD和Linux系统上可以使用。
·Systemd:Systemd是一套中央化系统及设置管理程序(init),其包括有守护进程、程序库以及应用软件。
·upstart:Upstart是一个基于事件的init程序, 用于替代传统的in it(多种类Unix计算机操作系统启动时用于执行任务的程序)·
sysvinit:sysvinit就是systemV风格的init系统, 顾名思义, 它源于SystemⅤ系列UNI。它提供了比BSD风格in it系统更高的灵活性。是已经风行了几十年的UNIX in it系统, 一直被各类Linux发行版所采用。
(2)Systemd
System d服务是一种以.service结尾的单元(unit) 配置文件,用于控制由System d控制或监视的进程。简单说,用于后台以守护精灵(daemon)的形式运行程序。
·System d广泛应用于新版本的RHEL、SUSELinuxEnterprise、CentOS、Fedora和openSUSE中,用于替代旧有的服务管理器service。
常用命令
system ctlcommandxxx. service
#其中command可以是start、stop、restart、enable等, 比如:
systemctl start httpd. service#启动Apache服务
systemctl stop httpd. service#停止Apache服务
systemctl restart httpd. service#停止Apache服务
systemctl enable maria db. service#将MariaDB服务设为开机启动
查看系统已有的system
配置文件示例
System d的Unit
·在System d中, 所有引导过程中System d要控制的东西都是一个单元。基本的用法如下:
·Description:代表整个单元的描述, 可根据需要任意填写。
·Wants:本单元启动了, 它“想要”的单元也会被启动。但是这个单元若启动不成功, 对本单元没有影响。
Requires:这个单元启动了, 那么它“需要”的单元也会被启动; 它“需要”的单元被停止了, 它自自己也活不了。但是请注意,这个设定并不能控制启动顺序,因为它“需要”的单元启动也需要时间,若它“需要”的单元启动还未完成,就开始启动本单元,则本单元也无法启动,所以不建议使用这个字段。
·On Failure:若本单元启动失败了, 那么启动这个单元作为折衷。
·Before/After:指定启动顺序。
Systemd的Service
·在定义完了Systemd用来识别服务的单元后, 我们来定义服务本体。基本的用法如下:
·Type :服务的类型, 各种类型的区别如下所示
·simple :默认, 这是最简单的服务类型。意思就是说启动的程序就是主体程序, 这个程序要是退出那么一切皆休。
·for king:标准Unix Daemon使用的启动方式。启动程序后会调用fork(函数, 把必要的通信频道都设置好之后父进程退出, 留下守护精灵的子进程。·oneshot:适用于那些被一次性执行的任务或者命令, 它运行完成后便了无痕迹。因为这类服务运行完就没有任何痕迹, 我们经常会需要使用Remain After Exit=yes。意思是说, 即使没有进程存在, Systemd也认为该服务启动成功了。同时只有这种类型支持多条命令, 命令之间用; 分割, 如需换行可以用\。
·dbus:这个程序启动时需要获取一块DBus空间, 所以需要和Bus Name=一起用。只有它成功获得了DBus空间, 依赖它的程序才会被启动。
·ExecStart:在输入的命令是start时候执行的命令, 这里的命令启动的程序必须使用绝对路径, 比如你必须用/sbin/arp而不能简单的以环境变量直接使用arp。·ExecStop:在输入的命令是stop时候执行的命令, 要求同上。
·ExecReload:这个不是必需, 如果不写则你的service就不支持restart命令。Exec Start和Exec Stop是必须要有的。
动手编写一个简单的service
(3)Crontab定时任务
crontab的基本介绍
crontab
crontab是用来定期执行程序的命令。
当安装完成操作系统之后,默认便会启动此任务调度命令。
crond命令每分钟会定期检查是否有要执行的工作, 如果有要执行的工作便会自动执行该工作。
常用命令
·crontab-l列出目前的日程表
·crontab-e编辑当前日程表
·crontab-r删除当前日程表
·crontab-u xx-l列出xx用户的日程表
crontab语法
crontab常用工具
crontab的坑
(4)Supervisor
·Supervisor是用Python开发的一套通用的进程管理程序, 能将一个普通的命令行进程变为后台daemon , 并监控进程状态, 异常退出时能自动重启。·Supervisor可以很方便的管理批量进程, 不仅支持启动、重启、关闭、重载, 还支持监控进程, 进程意外僵死后可自动拉起。
Supervisor配置
Supervisor启停
启动supervisord
supervisord -c /etc/supervisord.conf
查看一下是否监听
lsof -i:9001
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
superviso 14685 root 4u IPv4 20155719 0t0 TCP *:etlservicemgr (LISTEN)