“初识Linux:任务调度”的版本间差异

来自Wikioe
跳到导航 跳到搜索
第1行: 第1行:
[[category:Linux]]
[[category:Linux]]
== 用户管理 ==
* 尽量少用root,避免操作失误。可以用普通用户登录,在特殊操作时用“su -”(“su - root”)切换为系统管理员。
实现用户账号的管理,要完成的工作主要有如下几个方面:
# 用户账号的添加、删除与修改。
# 用户口令的管理。
# 用户组的管理。
{| class="wikitable"
! 命令 !! 说明
|-
! colspan="2"| 账号管理
|-
| useradd [选项] 用户名
| 添加用户账号:就是在/etc/passwd文件中为新用户增加一条记录,同时更新其他系统文件如/etc/shadow, /etc/group等。
* Linux提供了集成的系统管理工具userconf,它可以用来对用户账号进行统一管理。
选项:
# -c:(comment)指定一段注释性描述。
# -d:(目录)指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
# -g:(用户组)指定用户所属的用户组。
# -G:(用户组)指定用户所属的附加组。
# -s:(Shell文件)指定用户的登录Shell。
# -u:(用户号)指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
|-
| userdel [选项] 用户名
| 删除用户账号:就是要将/etc/passwd等系统文件中的该用户记录删除
选项:
# -r:把用户的主目录一起删除
|-
| usermod [选项] 用户名
| 修改用户账号:就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。
选项:(同useradd)
# -c:
# -d:
# -g:
# -G:
# -s:
# -u:
|-
! colspan="2"| 口令管理
|-
| passwd [选项] 用户名
| 用户账号刚创建时没有口令,被系统锁定无法使用,必须为其指定口令后才可以使用,即使是指定空口令。
选项:
# -l:锁定口令,即禁用账号。
# -u:口令解锁。
# -d:使账号无口令。
# -f:强迫用户下次登录时修改口令。
* “passwd”:修改当前用户的口令
* 普通用户只能修改自己口令,且修改时需要原始口令
|-
! colspan="2"| 用户组管理
|-
| groupadd [选项] 用户组
| 增加用户组
选项:
# -g:指定新用户组的组标识号(GID),不指定时在当前已有的最大组标识号的基础上加1为GID。
# -o:一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。
|-
| groupdel 用户组
| 删除用户组
|-
| groupmod [选项] 用户组
| 修改用户组属性
选项:
# -g:为用户组指定新的组标识号。
# -o:与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
# -n:将用户组的名字改为新名字
|}
* 如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限:
*: <syntaxhighlight lang="bash">
newgrp root
</syntaxhighlight>
*: 将当前用户切换到root用户组
=== 伪用户(pseudo users)===
系统中有一类用户称为伪用户(pseudo users),这些用户在/etc/passwd文件中也占有一条记录,但是不能登录,因为它们的登录Shell为空。它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。<br/>
常见的伪用户如下所示:
{| class="wikitable"
! 伪用户 !! 含义
|-
| bin || 拥有可执行的用户命令文件
|-
| sys || 拥有系统文件
|-
| adm || 拥有帐户文件
|-
| uucp || UUCP使用
|-
| lp || lp或lpd子系统使用
|-
| nobody || NFS使用
|}
=== 与用户账号有关的系统文件 ===
完成用户管理的工作有许多种方法,但是每一种方法实际上都是对有关的系统文件进行修改。<br/>
与用户和用户组相关的信息都存放在一些系统文件中,包括:'''/etc/passwd''', '''/etc/shadow''', '''/etc/group'''等。
==== /etc/passwd 文件 ====
Linux系统中的每个用户都在/etc/passwd文件中有一个对应的记录行,它记录了这个用户的一些基本属性。<br/>
这个文件对所有用户都是可读的。它的内容类似下面的例子:
<syntaxhighlight lang="properties">
# cat /etc/passwd
root:x:0:0:Superuser:/:
daemon:x:1:1:System daemons:/etc:
bin:x:2:2:Owner of system commands:/bin:
sys:x:3:3:Owner of system files:/usr/sys:
adm:x:4:4:System accounting:/usr/adm:
uucp:x:5:5:UUCP administrator:/usr/lib/uucp:
auth:x:7:21:Authentication administrator:/tcb/files/auth:
cron:x:9:16:Cron daemon:/usr/spool/cron:
listen:x:37:4:Network daemon:/usr/net/nls:
lp:x:71:18:Printer administrator:/usr/spool/lp:
sam:x:200:50:Sam san:/home/sam:/bin/sh
</syntaxhighlight>
每一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下:
<syntaxhighlight lang="properties">
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
</syntaxhighlight>
{| class="wikitable"
! 字段 !! 说明
|-
| 用户名
| 是代表用户账号的字符串
# 通常长度不超过8个字符,由大小写字母和/或数字组成
# 登录名中不能有冒号(:),因为冒号在这里是分隔符
# 为了兼容起见,登录名中最好不要包含点字符(.),并且不使用连字符(-)和加号(+)打头。
|-
| 口令
| 存放着加密后的用户口令字,或特殊的占位字符(“x”、“*”等)。
由于/etc/passwd文件对所有用户都可读带来的隐患。许多Linux系统都使用了shadow技术:<br/>
把真正的加密后的用户口令字存放到'''/etc/shadow'''文件中,<br/>
而在/etc/passwd文件的口令字段中只存放一个特殊的字符。
|-
| 用户标识号
| 是一个整数,系统内部用它来标识用户。
一般情况下它与用户名是一一对应的。如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,<br/>
但是它们可以有不同的口令、不同的主目录以及不同的登录Shell等
# 通常用户标识号的取值范围是0~65535
# 0是超级用户root的标识号
# 1~99由系统保留,作为管理账号
# 普通用户的标识号从100开始
* 在Linux系统中,这个界限是500
|-
| 组标识号
| 记录的是用户所属的用户组
* 对应着'''/etc/group'''文件中的一条记录
|-
| 注释性描述
| 记录着用户的一些个人情况
例如用户的真实姓名、电话、地址等,这个字段并没有什么实际的用途。
|-
| 主目录
| 用户的起始工作目录,它是用户在登录到系统之后所处的目录。
|-
| 登录Shell
|
<pre>
用户登录后,要启动一个进程,负责将用户的操作传给内核,
这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。
</pre>
Shell是用户与Linux系统之间的接口。<br/>
常用的有sh(Bourne Shell), csh(C Shell), ksh(Korn Shell), tcsh(TENEX/TOPS-20 type C Shell), bash(Bourne Again Shell)等。<br/>
* 如果不指定Shell,那么系统使用sh为默认的登录Shell,即这个字段的值为“/bin/sh”。
|}
==== /etc/shadow 文件 ====
/etc/shadow中的记录行与/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生,超级用户才拥有该文件读权限,这就保证了用户密码的安全性。<br/>
内容如下:
<syntaxhighlight lang="properties">
# cat /etc/shadow
root:Dnakfw28zf38w:8764:0:168:7:::
daemon:*::0:0::::
bin:*::0:0::::
sys:*::0:0::::
adm:*::0:0::::
uucp:*::0:0::::
nuucp:*::0:0::::
auth:*::0:0::::
cron:*::0:0::::
listen:*::0:0::::
lp:*::0:0::::
sam:EkdiSECLWPdSa:9740:0:0::::
</syntaxhighlight>
文件格式与/etc/passwd类似,由若干个字段组成,字段之间用":"隔开:
<syntaxhighlight lang="properties">
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
</syntaxhighlight>
{| class="wikitable"
! 字段 !! 说明
|-
| 登录名
| (同上)
|-
| 口令
| 加密后的用户口令字,长度为13个字符。
* 如果为空,则对应用户没有口令,登录时不需要口令;
* 如果含有不属于集合 { ./0-9A-Za-z }中的字符,则对应的用户不能登录。
|-
| 最后一次修改时间
| 表示的是从某个时刻起,到用户最后一次修改口令时的天数
|-
| 最小时间间隔
| 指的是两次修改口令之间所需的最小天数
|-
| 最大时间间隔
| 指的是口令保持有效的最大天数
|-
| 警告时间
| 从系统开始警告用户到用户密码正式失效之间的天数
|-
| 不活动时间
| 用户没有登录活动但账号仍能保持有效的最大天数
|-
| 失效时间
| 给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。
期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。
|}
==== /etc/group 文件 ====
用户组是Linux 系统中对用户进行管理及控制访问权限的一种手段。<br/>
用户与组之间是多对多的关系:
* 在/etc/passwd文件中记录的是用户所属的主组,也就是登录时所属的默认组,而其他组称为附加组。
* 用户要访问属于附加组的文件时,必须首先使用newgrp命令使自己成为所要访问的组中的成员。
内容如下:
<syntaxhighlight lang="properties">
root::0:root
bin::2:root,bin
sys::3:root,uucp
adm::4:root,adm
daemon::5:root,daemon
lp::7:root,lp
users::20:root,sam
</syntaxhighlight>
格式也类似于/etc/passwd文件,由冒号(:)隔开若干个字段:
<syntaxhighlight lang="properties">
组名:口令:组标识号:组内用户列表
</syntaxhighlight>
{| class="wikitable"
! 字段 !! 说明
|-
| 组名
| 用户组的名称。
与/etc/passwd中的登录名一样,组名不应重复
|-
| 口令
| 用户组加密后的口令字。
一般Linux 系统的用户组都没有口令,即这个字段一般为空,或者是*
|-
| 组标识号
| 系统内部用来标识组。
|-
| 组内用户列表
| 属于这个组的所有用户的列表,不同用户之间用逗号(,)分隔。
|}
=== 添加批量用户 ===
Linux系统提供了批量创建用户的工具,使用步骤如下:
# 创建用户信息文本user.txt:
#: 每一列按照/etc/passwd密码文件的格式书写
#: 每个用户的用户名、UID、宿主目录都不可以相同
#: 密码栏可以留做空白或输入x号
#: <syntaxhighlight lang="properties">
user001::600:100:user:/home/user001:/bin/bash
user002::601:100:user:/home/user002:/bin/bash
user003::602:100:user:/home/user003:/bin/bash
user004::603:100:user:/home/user004:/bin/bash
user005::604:100:user:/home/user005:/bin/bash
user006::605:100:user:/home/user006:/bin/bash
</syntaxhighlight>
# 以root身份执行命令'''/usr/sbin/newusers''',并从user.txt中导入数据,创建用户:
#: <syntaxhighlight lang="bash">
# newusers < user.txt
</syntaxhighlight>
#: 然后执行命令 vipw 或 vi /etc/passwd 检查是否已经出现这些用户的数据,且对应宿主目录是否已经创建
# 执行命令'''/usr/sbin/pwunconv''':将 /etc/shadow 产生的 shadow 密码解码,然后回写到 /etc/passwd 中,并将/etc/shadow的shadow密码栏删掉
#: 即为了方便下一步的密码转换工作,先取消 shadow password 功能。
#: <syntaxhighlight lang="bash">
# pwunconv
</syntaxhighlight>
# 编辑每个用户的密码对照文件:
#: 格式为:
#: <syntaxhighlight lang="properties">
用户名:密码
</syntaxhighlight>
#: 如“passwd.txt ”:
#: <syntaxhighlight lang="properties">
user001:123456
user002:123456
user003:123456
user004:123456
user005:123456
user006:123456
</syntaxhighlight>
# 以 root 身份执行命令'''/usr/sbin/chpasswd''':
#: chpasswd 会将经过 /usr/bin/passwd 命令编码过的密码写入 /etc/passwd 的密码栏
#: <syntaxhighlight lang="bash">
# chpasswd < passwd.txt
</syntaxhighlight>
# (确定密码经编码写入/etc/passwd的密码栏后)执行命令'''/usr/sbin/pwconv'''将密码编码为 shadow password,并将结果写入/etc/shadow
#: <syntaxhighlight lang="bash">
# pwconv
</syntaxhighlight>
=== 权限 ===
chmod 用于改变目录或文件的权限。如,修改文件abc的权限:
# chmod 775 abc:赋予用户读写执行、用户组读执行、其他组读执行权限
# chmod u=rwx,g=rx,o=rx abd:(同上)
# chmod u-x,g+w abc:去除用户的执行权限、增加用户组的写权限
# chmod a+r abc:为用户、用户组、其他组,都增加读权限
chown 用于改变目录或文件的所有者:
# chown www abc:
# chown www ./abc:
# chown -R root ./abc:改变目录及其子目录的所属用户为root
chgrp 用于改变用户的所属组:
# chgrp root abc:


== 网络 ==
== 网络 ==

2020年10月15日 (四) 15:39的版本


网络

服务

已安装服务的启停操作:

# 查看xxx服务状态
service xxx status
# 启动xxx服务
service xxx start
# 停止xxx服务
service xxx stop
# 重启xxx服务
service xxx restart
  • “service xxx start”等效于
    1. /etc/init.d/xxx start
    2. /etc/rd.d/init.d/xxx start
    3. systemctl start xxx.service

service 与 systemctl

service

service命令其实是去/etc/init.d目录下,去执行相关程序。长期以来 Linux 的启动一直采用init进程,这种方法有两个缺点:

  1. 启动时间长。init进程是串行启动,只有前一个进程启动完,才会启动下一个进程。
  2. 启动脚本复杂。init进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长。

systemctl

systemctl是 Systemd 的主命令,用于管理系统。
Systemd 是 Linux 系统工具,用来启动守护进程(Systemd 中的 d,即守护进程 daemon),能够快速并发地启动进程。
Systemd 并不是一个命令,而是一组命令,涉及到系统管理的方方面面。(参见阮一峰《Systemd 入门教程:命令篇》

  • 使用了 Systemd,就不需要再用init了。Systemd 取代了initd,成为系统的第一个进程(PID 等于 1),其他进程都是它的子进程。
  • systemctl 兼容了 service、chkconfig命令,如:
    # 管理服务的启动、重启、停止、重载、查看
    service foo start		systemctl start foo.service			启动服务
    service foo restart		systemctl restart foo.service		重启服务
    service foo stop		systemctl stop foo.service			停止服务
    service foo reload		systemctl reload foo.service		重新加载配置文件(不终止服务)
    service foo status		systemctl status foo.service		查看服务状态
    
    # 设置服务开机启动、不启动、查看各级别下服务启动状态
    chkconfig foo on		systemctl enable foo.service		开机自动启动
    chkconfig foo off		systemctl disable foo.service		开机不自动启动
    chkconfig foo			systemctl is-enabled foo.service	查看特定服务是否为开机自动启动
    chkconfig --list		systemctl list-unit-files --type=service	查看各个级别下服务的启动与禁用情况
    

防火墙

Linux中有两种防火墙软件,ConterOS7.0以上使用的是firewall,ConterOS7.0以下使用的是iptables:

firewall

操作 命令
开启防火墙: systemctl start firewalld
关闭防火墙: systemctl stop firewalld
查看防火墙状态: systemctl status firewalld
设置开机启动: systemctl enable firewalld
禁用开机启动: systemctl disable firewalld
重启防火墙: firewall-cmd --reload
开放端口(修改后需要重启防火墙方可生效): firewall-cmd --zone=public --add-port=8080/tcp --permanent
查看开放的端口: firewall-cmd --list-ports
关闭端口: firewall-cmd --zone=public --remove-port=8080/tcp --permanent

iptables

安装

CenterOS7.0以上版本并没有预装Iptables,需要自行装。

  • 安装前先关闭firewall防火墙
操作 命令
安装iptables yum install iptables
安装iptables-services yum install iptables-services
使用
操作 命令
开启防火墙: systemctl start iptables.service

Iptables开启.png

关闭防火墙: systemctl stop iptables.service
查看防火墙状态: systemctl status iptables.service
设置开机启动: systemctl enable iptables.service
禁用开机启动: systemctl disable iptables.service
查看filter表的几条链规则(INPUT链可以看出开放了哪些端口): iptables -L -n

Iptables查看filter表的链规.png

查看NAT表的链规则: iptables -t nat -L -n

Iptables查看NAT表的链规则.png

清除防火墙所有规则:
  • iptables -F
  • iptables -X
  • iptables -Z
给INPUT链添加规则(开放8080端口): iptables -I INPUT -p tcp --dport 8080 -j ACCEPT

Iptables给INPUT链添加规则.png

查找规则所在行号: iptables -L INPUT --line-numbers -n

Iptables查找规则所在行号.png

根据行号删除过滤规则(关闭8080端口): iptables -D INPUT 1

Iptables根据行号删除过滤规则.png

进程

任务调度

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

添加任务

  1. “crontab -e”:添加任务
  2. “0 2 * * * date >> /home/mydate”:在crontab中添加该命令,每天临晨两点把时间写到/home/mydate中
    • “0 2 * * *”为时间规则

调度多个任务

方法一:直接使用 crontab -e 添加任务
方法二:

  1. 把所有的任务写入一个可执行文件中(.sh文件,shell代码),并为文件设置可执行权限
  2. 再将可执行文件路径使用 corntab -e 添加到任务调度,如“* * * * * /root/mytask.sh”

终止任务

  1. crontab -l:列出当前所有调度任务
  2. crontab -r:终止调度任务

时间规则

时间规则“* * * * *”,分别表示:

“* * * * *”
说明 范围
分钟 每小时的第几分钟 0-59
小时 每天的第几小时 0-23
日期 每月的第几天 1-31
月份 每年的第几月 1-12
星期 每周的星期几 0-6
  • 范围不正确时,任务不执行

vi编辑器

所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在。
Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
二者分别定位于文本编辑器和程序开发工具。

  1. “vi Hello”:使用vi打开Hello文件
  2. 按下“i”:进入插入模式
  3. 按下“esc”:进入命令模式
  4. 输入“:wq”:保存并退出
    :q!”:推出不保存

工作模式

Linux编辑器vi-vim工作模式.png

键盘图

Linux编辑器vi-vim键盘图.gif

命令

  • “tab”键:双击命令提示,单机补全(当前目录下有的)文件名称。
命令 说明
start X 进入图形界面
shutdown -h now 立即关机
  1. poweroff 关机(poweroff -f 强制关机)
shutdown -r now 立即重启
logout 注销
man 命令 显示命令的用法
history 显示命令历史记录
  1. history 5:显示最近使用的5个历史命令

执行历史命令:

  1. !5:执行历史编号为5的命令
  2. !ls:执行最后一次以ls开头的命令
env 显示当前系统的环境变量