1.进程管理
这里主要向大家介绍在Linux系统中,进程的概念、进程的状态以及如何查看进程如何终止进程,让我们可以更深入的了解到进程。
进程的概念:进程由程序,数据和进程控制块组成,是正在执行的程序,程序的一次执行过程,是资源调度的基本单位。
进程与程序的区别:进程是动态的,程序是静态的;进程是运行中的程序,而程序还是保存在硬盘上的可执行代码。
进程与线程的区别:为了让计算机在同一时间内能执行更多任务,在进程内部又划分了许多线程。线程是在进程内部,比进程更小并且能独立运行的基本单元。进程在执行过程拥有独立的内存单元,但是线程基本上不拥有系统资源,它与同属一个进程的其他线程共享进程拥有的全部资源。
Linux进程:
Linux系统中的进程也使用数字进行标记,每个进程的标记号称为PID。系统启动后的第一个进程是systemd,其PID是1. Systemd是唯一一个由系统内核直接运行的进程。新的进程可以用系统调用fork来产生,从已经存在的进程中派生出一个新进程,新进程是产生它进程的子进程。 当系统启动以后,systemd进程会创建login进程等待用户登录系统,login进程是systemd进程的子进程。当用户登录系统后,login进程就会用户启动shell进程,shell进程是login进程的子进程,而此后用户运行的进程都是由shell衍生出来的。
进程的三种状态:
执行(Running)状态:当进程已获得处理机,其程序正在处理机上执行,此时的进程状态称为执行状态。
就绪:当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态。
阻塞:正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的事件可有多种,例如,等待I/O完成、申请缓冲区不能满足、等待信件(信号)等。
进程的三种状态及基本转换如图:
交互进程:是由一个Shell启动的进程。交互进程既可以在前台运行,也可以在后台运行。例如控制台命令shell,文本编辑器,图形应用程序
批处理进程:和终端没有联系,是一个进程序列。
监控进程:(也称系统守护进程)是Linux系统启动时运行的进程,并常驻后台。例如,httpd是著名的Apache服务器的监控进程。
查看进程状态:
了解系统中进程的状态是对进程进行管理的前提,使用不同的命令工具可以从不同的角度查看进程状态,通过命令可以查看进程状态,获取有关进程的相关信息。例如:显示哪些进程正在执行和执行的状态。进程是否结束,进程有没有僵死。哪些进程占用了过多资源等。
ps命令:对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而 ps 命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多 的资源等等,总之大部分信息都是可以通过执行该命令得到的。
例:查看所有进程
例:查看进程相关的详细信息
例:查看root用户的所有进程
top命令:top命令可以及时跟踪包括CPU、内存等系统资源占用情况,默认情况下每10秒钟刷新一次,其作用类似于Windows系统中的“任务管理器”。
例:top命令结果
进程控制:
1. 启动进程:
在Linux系统中启动进程有两个途径:手工启动和调度启动。调度启动是事先设置好在某个时间要运行的程序,当到了预设的时间后,由系统自动启动。由用户在shell命令行下输入要执行的程序来启动一个进程,即为手工启动进程,其启动方式又分为前台启动和后台启动。 前台启动是默认的进程启动方式,如用户输入“ls –l”命令就会启动一个前台进程。当计算机在处理此命令的时候,用户不能再进行其它的操作。如果在要执行的命令后面加上一个“&”符号,此时程序将转到后台运行,其执行结果不在屏幕上显示,但在此命令的执行过程中,用户仍可以继续执行其它的操作。
2. 改变进程的运行方式:
当命令正在前台执行时(运行尚未结束),按Ctrl+Z组合键可以将当前进程挂起(调入后台并停止执行),这在需要暂停当前进程并进行其它操作时特别有用。 使用jobs命令可以查看在后台运行的进程任务,结合“-l”选项可以同时显示出该进程对应的PID号。每一行记录对应一个后台进程的状态信息,行首的数字表示该进程在后台的任务编号。
例:挂起执行的进程一段时间后再重新调入前台执行
3. 终止进程:
通常终止一个前台进程可以使用Ctrl+C组合键,对于在其他终端上或是后台运行的进程,就需要用kill命令来终止。
例:查看可用进程信号
例如:
杀死指定pid的进程 (-9 强制杀死进程)。
[root@localhost ~]# kill -9 2978
通过进程名终止所有进程。
[root@localhost ~]# pkill httpd
[root@localhost ~]# killall httpd
通过模式匹配终止进程,终止Bob用户所有进程。
[root@localhost ~]# pkill -u Bob
终止root用户的sshd进程。
[root@localhost ~]# pkill -u root sshd
终止Bob组内所有进程
[root@localhost ~]# pkill -G Bob
2.基础服务
这里主要介绍linux里一些比较基础服务管理
2.1系统的启动流程
linux启动时我们会看到许多启动信息,Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为4个阶段:
内核的引导当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。操作系统接管硬件以后,首先读入 /boot 目录下的内核文件
运行 init:init 进程是系统所有进程的起点,可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动 此时在centos7中systemd 成为linux第一个进程(PID=1),接管系统启动
系统初始化:systemd思想是层层包含关系,在这个阶段,会启动依赖的multi-user.target, 而multi-user.target会将控制权交给 basic.target, basi.target用于启动普通服务,特别是图形管理服务, basi.target 会将控制权交给 sysinit.target, sysinit.target会启动重要的系统服务例如系统挂载,内存交换空间和设备,内核补充选项等等
建立终端:systemd执行multi-user.target下的getty.target建立tty终端。同时它会显示一个文本登录界面,这个界面就是我们经常看到的登录界面,在这个登录界面中会提示用户输入用户名,而用户输入的用户将作为参数传给login程序来验证用户的身份
Linux系统有7个运行级别(runlevel):
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动。
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆。
运行级别2:多用户状态(没有NFS)。
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式。
运行级别4:系统未使用,保留。
运行级别5:X11控制台,登陆后进入图形GUI模式。
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动。
2.2守护进程
在linux或者unix操作系统中,守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。
按照服务类型,守护进程可以分为如下两类:
系统守护进程:dbus , crond , cpus , rsyslogd等。
网络守护进程:sshd , htttpd , postfix , xinetd等。
Systemctl管理服务systemctl命令:
格式: systemctl [OPTIONS...] COMMAND NAME[.service]
启动服务:service NAME start --> systemctl start NAME.service
停止服务:service NAME stop --> systemctl stop NAME.service
重启服务:service NAME restart --> systemctl restart NAME.service
查看状态:service NAME status --> systemctl status NAME.service
重载或重启服务:systemctl reload-or-restart NAME.service
重载或条件式重启:systemctl reload-or-try-restart NAME.service
查看某服务当前激活与否的状态:systemctl is-active NAME.service
查看所有已激活的服务:systemctl list-units -t service
查看所有服务(激活和未激活):chkconfig --list-->systemctl list-units -t service -a
设置服务开机自启:chkconfig NAME on --> systemctl enable NAME.service
禁止服务开机自启:chkconfig NAME off --> systemctl disable NAME.service
查看某服务是否能开机自启:chkconfig --list NAME --> systemctl is-enabled NAME.service
例:查看服务的状态
查看激活的服务
2.3远程访问
SSH:
SSH(即 Secure Shell),是一项创建在应用层和传输层基础上的安全协议,为计算机 Shell 提供安全的传输和使用环境。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。通过SSH可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。
Openssh:
OpenSSH 是 SSH (Secure SHell) 协议的免费开源实现。SSH协议族可以用来进行远程控制, 或在计算机之间传送文件。而实现此功能的传统方式,如telnet(终端仿真协议)、 rcp、ftp、rlogin、rsh都是极为不安全的,并且会使用明文传送密码。OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控制和文件传输过程中的数据,并由此来代替原来的类似服务。
口令登录:
当远程主机的公钥被接受以后,它就会被保存在文件$HOME/.ssh/known_hosts之中。下次再连接这台主机,系统就会认出它的公钥已经保存在本地了,从而跳过警告部分,直接提示输入密码。密码正确即可远程登陆。每个SSH用户都有自己的known_hosts文件,此外系统也有一个这样的文件,通常是/etc/ssh/ssh_known_hosts,保存一些对所有用户都可信赖的远程主机的公钥。
例:获取10.10.5.129主机的公钥添加到know_hosts文件。
[root@localhost .ssh]# ssh-keyscan -t rsa 10.10.5.129 > ~/.ssh/known_hosts
[root@localhost .ssh]# cat known_hosts
10.10.5.129 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDSTlTW5MCLOrDRyhd7dxVrxhtJrkSiFADKjcwBt+JGx4G5uYi7+DARw+ukzZzqEnhT9XQbQzYysRi0i2LlIBELBJtwpzhvMvD2p2S+Sm6oAw6IMepCviFRwpQElZrWoB333ds77TYOlAMe9/dP98xvnH+Yr+JasTlkvHBKKmAsVmjhB0yB7poyceYMcK2hUbQp0JNqDXz9OnT+Eyl3zSZjcn8gxn9wmvbdwbPmrCb9XVJvOlG9JvlVprv9VGXOW/4jF/Nk6/lhZRg8vHyLUwRsQmLtzA0HBzodrRCM+ttsN3KVBupItsX6G4txq1A+w+67wiZOFA4Zl0Kilabl5HkN
可以看到10.10.5.129主机的公钥已成功添加到known_hosts
公钥登录:
所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
例:生成公钥和私钥的结果
2.4日志系统
日志管理是网络基础架构中最重要的组件之一。 日志消息由许多系统软件,例如实用程序,应用程序,守护程序,与网络,内核,物理设备等相关的服务不断生成。日志文件被证明是有用的,以解决Linux系统问题 ,监视系统和审查系统的安全强度和问题。 rsyslog是一个开源日志程序,它是大量Linux发行版中最流行的日志记录机制。 它也是CentOS 7或RHEL 7中的默认日志记录服务。CentOS中的Rsyslog守护进程可以配置为作为服务器运行,以便从多个网络设备收集日志消息。 这些设备充当客户端,并配置为将其日志传送到rsyslog服务器。
rsyslog的配置文件的/etc/rsyslog.conf结构如下:
模块(modules):配置加载的模块,如:ModLoad imudp.so配置加载UDP传输模块。 全局配置(global directives):配置rsyslog守护进程的全局属性,比如主信息队列大小(MainMessageQueueSize)。
规则(rules)【选择器+动作】:每个规则行由两部分组成,selector部分和action部分,这两部分由一个或多个空格或tab分隔,selector部分指定源和日志等级,action部分指定对应的操作。
模板(templates): 指定记录的消息格式,也用于动态文件名称生成。
输出(outputs):多用户期望的消息进行预定义。
常用的modules如下:
imudp,传统方式的UDP传输,有损耗。
imtcp,基于TCP明文的传输,只在特定情况下丢失信息,并被广泛使用
日志设施
设备字段 | 说明 |
auth(security), authpriv | 授权和安全相关的消息 |
kern | 来自Linux内核的消息 |
| 由mail子系统产生的消息 |
cron | cron守护进程相关的信息 |
daemon | 守护进程产生的信息 |
news | 网络消息子系统 |
user | 用户进程相关的信息 |
lpr | 打印相关的日志信息 |
local0 to local7 | 保留给本地其他应用程序使用 |
动作字段说明
动作字段 | 说明 |
filename | 记录到普通文件或设备文件 |
:omusrmsg:users | 发送信息到指定用户,users可以是使用逗号分隔的用户列表,*表示所有用户 |
device | 将信息发送到指定设备中,如/dev/console |
|named_pipe | 将日志记录到命名管道 |
@hostname | 将信息发送到远程主机(tcp),该主机必须运行rsyslogd |
@@hostname | 将信息发送到远程主机(udp) |
例: 配置规则
#### RULES ####
#将所有内核消息记录到控制台
#kern.* /dev/console
#记录所有设施的info或者更高级别的消息到/var/log/messages,除了mail/authpriv/cron *.info;mail.none;authpriv.none;cron.none /var/log/messages
# 记录authpriv设备任何级别的信息到/var/log/secure authpriv.* /var/log/secure # 记录mail设备任何级别的信息到/var/log/maillog,
#-符号表示不立即写入到磁盘,有利于加快写入速度 mail.* -/var/log/maillog
# 记录定时任务设备的所有级别信息发送到指定文件 cron.* /var/log/cron
# 将任何设备emerg级别或更高级别的信息发送给系统上的所有用户 *.emerg
远程日志服务器
rsyslog是一个开源工具,被广泛用于Linux系统以通过TCP/UDP协议转发或接收日志消息。rsyslog守护进程可以被配置成两种环境,一种是配置成日志收集服务器,rsyslog进程可以从网络中收集其它主机上的日志数据,这些主机会将日志配置发送到另外的远程服务器。rsyslog的另外一个用法,就是可以配置为客户端,用来过滤和发送内部日志消息到本地文件夹(如/var/log)或一台可以路由到的远程rsyslog服务器上。
rsyslog有2种传送方式,UDP和TCP 。UDP是一种比TCP速度快,但是并不具有TCP一样的数据流的可靠性。所以如果你需要使用可靠的传送机制就去掉tcp部分的数值。需要注意的是,TCP和UDP可以被同时生效来监听TCP/UDP 连接。如果监控的是私有ip地址,开启UDP足以。
配置客户端
接下来的步骤,是要将CentOS机器转变成rsyslog客户端,将其所有内部日志消息发送到远程中央日志服务器上。
客户端配置如下: 需要添加以下声明到文件底部。将IP地址替换为远程rsyslog服务器的IP地址。 *.*@hostname:514 上面的声明告诉rsyslog守护进程,将系统上各个设备的各种日志消息路由到远程rsyslog服务器的UDP端口514。
如果出于某种原因,你需要更为可靠的协议,如TCP,而rsyslog服务器也被配置为监听TCP连接,你必须在远程主机的IP地址前添加一个额外的@字符,像下面这样: *.*@@hostname:514 如果你只想要转发服务器上的指定设备的日志消息,比如说内核设备,那么你可以在rsyslog配置文件中使用以下声明。 kern.*@hostname:514
重启服务
[root@localhost .ssh]# systemctl restart rsyslog
查看日志文件
从rsyslog的配置文件可知,日志文件存放在/var/log目录下。为了查看日志文件内容必须要有root权限。
2.5计划任务
计划任务是指在约定的时间执行预先安排好的进程任务,即可以在无需人工干预的情况下运行作业。Linux下的调度启动分为两种:
at调度:设置一次性的计划任务
cron调度:设置周期性的计划任务
计划任务
1)cron假定服务器是24*7全天候运行的,当系统时间变化或有一段关机时间,就会遗漏这段时间应该执行的cron任务。 anacron是针对非全天候运行而设计的,当anacron在一段时间内发现cron任务没有执行时,会执行因为时间不连续而遗漏的计划任务。
2)crontab 配置文件格式: * command 分 时 日 月 周 命。第1列表示分钟1~59 每分钟用*或者 */1表示、第2列表示小时1~23(0表示0点)、第3列表示日期1~31、第4列表示月份1~12、第5列标识号星期0~6(0表示星期天)、第6列要运行的命令
3)设置定时任务:把命令写入到文件底部保存或者可以使用crontab -e 命令编辑文件. 在计划任务配置记录中的命令建议使用绝对路径,以避免因缺少执行路径而无法执行命令的情况。
4)Anacron的执行:在centos7中,/etc/cron.hourly目录下的脚本由守护进程crond直接执行;/etc/cron.{daily, weekly, monthly}目录下的脚本由crond调用anacron间接执行。
5)/etc/cron.allow:将可以使用 crontab 的帐号写入其中,若不在这个文件内的使用者则不可使用 crontab。 /etc/cron.deny:将不可以使用 crontab 的帐号写入其中,若未记录到这个文件当中的使用者,就可以使用 crontab。