“初识Linux:任务调度”的版本间差异
(→vi编辑器) |
(→服务) |
||
第523行: | 第523行: | ||
== 服务 == | == 服务 == | ||
已安装服务的启停操作: | |||
<syntaxhighlight lang="bash"> | |||
# 查看xxx服务状态 | |||
service xxx status | |||
# 启动xxx服务 | |||
service xxx start | |||
# 停止xxx服务 | |||
service xxx stop | |||
# 重启xxx服务 | |||
service xxx restart | |||
</syntaxhighlight> | |||
* “service xxx start”等效于 | |||
*# /etc/init.d/xxx start | |||
*# /etc/rd.d/init.d/xxx start | |||
*# systemctl start xxx.service | |||
=== service 与 systemctl === | |||
==== service ==== | |||
service命令其实是去/etc/init.d目录下,去执行相关程序。长期以来 Linux 的启动一直采用init进程,这种方法有两个缺点: | |||
# 启动时间长。init进程是串行启动,只有前一个进程启动完,才会启动下一个进程。 | |||
# 启动脚本复杂。init进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长。 | |||
==== systemctl ==== | |||
systemctl是 Systemd 的主命令,用于管理系统。<br/> | |||
Systemd 是 Linux 系统工具,用来启动守护进程(Systemd 中的 d,即守护进程 daemon),能够快速并发地启动进程。<br/> | |||
Systemd 并不是一个命令,而是一组命令,涉及到系统管理的方方面面。(参见[http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html 阮一峰《Systemd 入门教程:命令篇》]) | |||
* 使用了 Systemd,就不需要再用init了。Systemd 取代了initd,成为系统的第一个进程(PID 等于 1),其他进程都是它的子进程。 | |||
* systemctl 兼容了 service、chkconfig命令,如: | |||
*: <syntaxhighlight lang="bash"> | |||
# 管理服务的启动、重启、停止、重载、查看 | |||
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 查看各个级别下服务的启动与禁用情况 | |||
</syntaxhighlight> | |||
=== 防火墙 === | === 防火墙 === | ||
Linux中有两种防火墙软件,ConterOS7.0以上使用的是firewall,ConterOS7.0以下使用的是iptables: | |||
==== firewall ==== | |||
==== iptables ==== | |||
== 进程 == | == 进程 == |
2020年10月15日 (四) 15:14的版本
启动
启动过程
Linux启动过程分析:
- BIOS自检
- 启动GRUB/LILO
- 运行Linux内核并检测硬件
- 运行系统的第一个进程init
- init读取系统引导配置文件“/etc/inittab”中的信息进行初始化
- /etc/rc.d/rc.sysinit 系统初始化脚本(读取用户密码等文件)
- /etc/rc.d/rcX.d/[KS]* 根据运行级别X(0、1、2?),配置服务
- /etc/rc.d/rc.local 执行本地特殊配置
- 其他特殊服务
运行级别
- 0:关机
- 1:单用户(类似于Windows安全模式?)
- 2:多用户状态没有网络服务
- 3:多用户状态有网络服务(常用)
- 4:(系统未使用)
- 5:图形界面
- 6:系统重启
- shell中“startX”可进入图形界面,前提如果安装了
- 修改默认的运行级别,“/etc/inittab”的“id:3:initdefault”中的级别数字
忘记密码
- 进入单用户模式修改密码即可
# 修改root用户密码 passwd root (设置root的密码) # 设置启动级别 #init 6
centos6系列:
- 在引导界面(redhat的grub引导界面)按e,进入编辑模式
- 移动光标到“Kernel ...”一行按e,进入kernel该行的编辑画面中
- 在kernel行末尾输入“ single”并回车(注意空格)
- 按b重启,进入系统
- 进入系统修改密码
centos7系列:
- 在引导界面选择内核后,按e进入编辑模式
- 编辑页面,将ro改为rw,在LANG 后添加init=/bin/sh(或/sysroot/bin/sh?)
- 按 Ctrl+x 用修改的参数引导系统
- 进入系统修改密码
- 重启系统
文件系统
分区
目录结构
命令 | 说明 |
---|---|
系统必须 | |
/boot | 存放的启动Linux 时使用的内核文件,包括连接文件以及镜像文件 |
/etc | 存放所有的系统需要的配置文件和子目录列表 |
/lib | 系统最基本的动态连接共享库(类似于Windows的DLL文件)。几乎所有的应用程序都需要用到这些共享库。 |
/sys | 该目录下安装了Linux2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息:
该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中。 |
/selinux | Redhat/CentOS 所特有的目录,存放selinux相关的文件(Selinux 是一个安全机制,类似于 windows 的防火墙) |
指令集合 | |
/bin | 系统中的常用命令 |
/sbin | (Superuser Binaries)存放的是系统管理员使用的系统管理程序 |
账户 | |
/home | 普通用户的相关文件(/home/用户名) |
/root | Root用户(系统管理员)的用户主目录 |
/usr | (unix shared resources)共享资源目录,很多的用户应用程序和文件都放在这个目录(类似于windows的program files)
|
外部文件管理 | |
/dev | 系统中的所有外部设备相关文件 |
/media | 类windows的其他设备(如U盘、光驱等等),识别后linux会把设备放到这个目录下。 |
/mnt | 临时挂载路径 |
临时文件 | |
/run | 临时文件系统,存储系统启动以来的信息。
|
/lost+found | 一般情况下为空,系统非法关机后,这里就存放一些文件 |
/tmp | 临时目录 |
运行过程使用 | |
/var | (variable)存放系统中经常变化的文件(如:日志、邮件) |
/proc | 虚拟的目录,是系统内存的映射,用来管理内存空间。
|
扩展使用 | |
/opt | (默认为空)安装额外软件可以放在这个里面 |
/srv | (不用做服务器则为空)存放服务启动后需要提取的数据 |
- /bin, /usr/bin 是给系统用户使用的指令(除root外的普通用户),而/sbin, /usr/sbin 则是给 root 使用的指令
- 在Linux中访问设备和访问文件的方式是相同的
- swap:无挂载点的分区,交换分区
文件属性
使用 ll 或者 ls –l命令来显示一个文件的属性以及文件所属的用户和组:
挂载
- 挂载命令:
mount [-参数] [设备名称] [挂载点]
- 挂载光驱时,可直接使用“mount /mnt/cdrom”
- 卸载命令:
unmount [设备名称]
- 查看目录在哪个分区
df [目录全路径]
- 查看磁盘使用情况:
df [-参数]
- 查看Linux分区信息:
fdisk -l
用户管理
- 尽量少用root,避免操作失误。可以用普通用户登录,在特殊操作时用“su -”(“su - root”)切换为系统管理员。
实现用户账号的管理,要完成的工作主要有如下几个方面:
- 用户账号的添加、删除与修改。
- 用户口令的管理。
- 用户组的管理。
命令 | 说明 |
---|---|
账号管理 | |
useradd [选项] 用户名 | 添加用户账号:就是在/etc/passwd文件中为新用户增加一条记录,同时更新其他系统文件如/etc/shadow, /etc/group等。
选项:
|
userdel [选项] 用户名 | 删除用户账号:就是要将/etc/passwd等系统文件中的该用户记录删除
选项:
|
usermod [选项] 用户名 | 修改用户账号:就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。
选项:(同useradd)
|
口令管理 | |
passwd [选项] 用户名 | 用户账号刚创建时没有口令,被系统锁定无法使用,必须为其指定口令后才可以使用,即使是指定空口令。
选项:
|
用户组管理 | |
groupadd [选项] 用户组 | 增加用户组
选项:
|
groupdel 用户组 | 删除用户组 |
groupmod [选项] 用户组 | 修改用户组属性
选项:
|
- 如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限:
newgrp root
- 将当前用户切换到root用户组
伪用户(pseudo users)
系统中有一类用户称为伪用户(pseudo users),这些用户在/etc/passwd文件中也占有一条记录,但是不能登录,因为它们的登录Shell为空。它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。
常见的伪用户如下所示:
伪用户 | 含义 |
---|---|
bin | 拥有可执行的用户命令文件 |
sys | 拥有系统文件 |
adm | 拥有帐户文件 |
uucp | UUCP使用 |
lp | lp或lpd子系统使用 |
nobody | NFS使用 |
与用户账号有关的系统文件
完成用户管理的工作有许多种方法,但是每一种方法实际上都是对有关的系统文件进行修改。
与用户和用户组相关的信息都存放在一些系统文件中,包括:/etc/passwd, /etc/shadow, /etc/group等。
/etc/passwd 文件
Linux系统中的每个用户都在/etc/passwd文件中有一个对应的记录行,它记录了这个用户的一些基本属性。
这个文件对所有用户都是可读的。它的内容类似下面的例子:
# 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
每一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下:
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
字段 | 说明 |
---|---|
用户名 | 是代表用户账号的字符串
|
口令 | 存放着加密后的用户口令字,或特殊的占位字符(“x”、“*”等)。
由于/etc/passwd文件对所有用户都可读带来的隐患。许多Linux系统都使用了shadow技术: |
用户标识号 | 是一个整数,系统内部用它来标识用户。
一般情况下它与用户名是一一对应的。如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,
|
组标识号 | 记录的是用户所属的用户组
|
注释性描述 | 记录着用户的一些个人情况
例如用户的真实姓名、电话、地址等,这个字段并没有什么实际的用途。 |
主目录 | 用户的起始工作目录,它是用户在登录到系统之后所处的目录。 |
登录Shell |
用户登录后,要启动一个进程,负责将用户的操作传给内核, 这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。 Shell是用户与Linux系统之间的接口。
|
/etc/shadow 文件
/etc/shadow中的记录行与/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生,超级用户才拥有该文件读权限,这就保证了用户密码的安全性。
内容如下:
# 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::::
文件格式与/etc/passwd类似,由若干个字段组成,字段之间用":"隔开:
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
字段 | 说明 |
---|---|
登录名 | (同上) |
口令 | 加密后的用户口令字,长度为13个字符。
|
最后一次修改时间 | 表示的是从某个时刻起,到用户最后一次修改口令时的天数 |
最小时间间隔 | 指的是两次修改口令之间所需的最小天数 |
最大时间间隔 | 指的是口令保持有效的最大天数 |
警告时间 | 从系统开始警告用户到用户密码正式失效之间的天数 |
不活动时间 | 用户没有登录活动但账号仍能保持有效的最大天数 |
失效时间 | 给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。
期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。 |
/etc/group 文件
用户组是Linux 系统中对用户进行管理及控制访问权限的一种手段。
用户与组之间是多对多的关系:
- 在/etc/passwd文件中记录的是用户所属的主组,也就是登录时所属的默认组,而其他组称为附加组。
- 用户要访问属于附加组的文件时,必须首先使用newgrp命令使自己成为所要访问的组中的成员。
内容如下:
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
格式也类似于/etc/passwd文件,由冒号(:)隔开若干个字段:
组名:口令:组标识号:组内用户列表
字段 | 说明 |
---|---|
组名 | 用户组的名称。
与/etc/passwd中的登录名一样,组名不应重复 |
口令 | 用户组加密后的口令字。
一般Linux 系统的用户组都没有口令,即这个字段一般为空,或者是* |
组标识号 | 系统内部用来标识组。 |
组内用户列表 | 属于这个组的所有用户的列表,不同用户之间用逗号(,)分隔。 |
添加批量用户
Linux系统提供了批量创建用户的工具,使用步骤如下:
- 创建用户信息文本user.txt:
- 每一列按照/etc/passwd密码文件的格式书写
- 每个用户的用户名、UID、宿主目录都不可以相同
- 密码栏可以留做空白或输入x号
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
- 以root身份执行命令/usr/sbin/newusers,并从user.txt中导入数据,创建用户:
# newusers < user.txt
- 然后执行命令 vipw 或 vi /etc/passwd 检查是否已经出现这些用户的数据,且对应宿主目录是否已经创建
- 执行命令/usr/sbin/pwunconv:将 /etc/shadow 产生的 shadow 密码解码,然后回写到 /etc/passwd 中,并将/etc/shadow的shadow密码栏删掉
- 即为了方便下一步的密码转换工作,先取消 shadow password 功能。
# pwunconv
- 编辑每个用户的密码对照文件:
- 格式为:
用户名:密码
- 如“passwd.txt ”:
user001:123456 user002:123456 user003:123456 user004:123456 user005:123456 user006:123456
- 以 root 身份执行命令/usr/sbin/chpasswd:
- chpasswd 会将经过 /usr/bin/passwd 命令编码过的密码写入 /etc/passwd 的密码栏
# chpasswd < passwd.txt
- (确定密码经编码写入/etc/passwd的密码栏后)执行命令/usr/sbin/pwconv将密码编码为 shadow password,并将结果写入/etc/shadow
# pwconv
权限
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:
网络
服务
已安装服务的启停操作:
# 查看xxx服务状态
service xxx status
# 启动xxx服务
service xxx start
# 停止xxx服务
service xxx stop
# 重启xxx服务
service xxx restart
- “service xxx start”等效于
- /etc/init.d/xxx start
- /etc/rd.d/init.d/xxx start
- systemctl start xxx.service
service 与 systemctl
service
service命令其实是去/etc/init.d目录下,去执行相关程序。长期以来 Linux 的启动一直采用init进程,这种方法有两个缺点:
- 启动时间长。init进程是串行启动,只有前一个进程启动完,才会启动下一个进程。
- 启动脚本复杂。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
iptables
进程
任务调度
任务调度:系统在某个特定时间,执行特定的命令或程序。
添加任务
- “crontab -e”:添加任务
- “0 2 * * * date >> /home/mydate”:在crontab中添加该命令,每天临晨两点把时间写到/home/mydate中
- “0 2 * * *”为时间规则
调度多个任务
方法一:直接使用 crontab -e 添加任务
方法二:
- 把所有的任务写入一个可执行文件中(.sh文件,shell代码),并为文件设置可执行权限
- 再将可执行文件路径使用 corntab -e 添加到任务调度,如“* * * * * /root/mytask.sh”
终止任务
- crontab -l:列出当前所有调度任务
- crontab -r:终止调度任务
时间规则
时间规则“* * * * *”,分别表示:
“* * * * *” | ||
---|---|---|
值 | 说明 | 范围 |
分钟 | 每小时的第几分钟 | 0-59 |
小时 | 每天的第几小时 | 0-23 |
日期 | 每月的第几天 | 1-31 |
月份 | 每年的第几月 | 1-12 |
星期 | 每周的星期几 | 0-6 |
- 范围不正确时,任务不执行
vi编辑器
所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在。
Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
二者分别定位于文本编辑器和程序开发工具。
- “vi Hello”:使用vi打开Hello文件
- 按下“i”:进入插入模式
- 按下“esc”:进入命令模式
- 输入“:wq”:保存并退出
- “:q!”:推出不保存
工作模式
键盘图
命令
- “tab”键:双击命令提示,单机补全(当前目录下有的)文件名称。
命令 | 说明 |
---|---|
start X | 进入图形界面 |
shutdown -h now | 立即关机
|
shutdown -r now | 立即重启 |
logout | 注销 |
man 命令 | 显示命令的用法 |
history | 显示命令历史记录
执行历史命令:
|
env | 显示当前系统的环境变量 |