Linux 重定向 源码包 进程管理 系统负载 启动流程及管理

一、重定向

什么是重定向?
将原本要输出在屏幕中的内容,重新定向输出到指定的文件或设备中。
为什么要使用重定向?

1. 重定向的分类

  • 标准输入
  • 标准输出

#将错误输出,重定向到黑洞
[root@localhost ~]# ls  /ooo 2>/dev/null

2. 管道技术

1. 管道操作符号“ | ”叫做管道符
作用:将管道符左边命令的标准输出,交给管道符右边命令的标准输入来处理
用法:cmd1|cmd2|cmd3| cmd4...

2. 统计出passwd文件中,所有用户的shell种类
[root@localhost ~]# awk -F: '{print $7}' /etc/passwd|sort |uniq|wc -l
6

3. tee 和 重定向的区别
[root@zls ~]# date > date.txt
[root@zls ~]# date |tee date.txt

3. 命令传递参数 xargs

xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。
xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。
xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。
xargs 默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。
xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。
之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了 xargs 命令,例如:
将查询结果复制到tmp下。
[root@localhost opt]# find /etc/ -name '*.conf'|xargs cp -t /tmp/
查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件
[root@localhost log]# find /home/omc/ -maxdepth 1 -user root -type f | xargs file {}

二、安装与自制源码包

1. nginx源码包安装

## 源码安装nginx
====================
# 0.安装依赖
[root@qls nginx-1.16.1]# yum install -y gcc gcc-c++ glibc zlib-devel pcre-devel openssl-devel

# 1.下载nginx源码包
[root@qls ~]# wget http://nginx.org/download/nginx-1.16.1.tar.gz

# 2.解压
[root@qls ~]# tar xf nginx-1.16.1.tar.gz
[root@qls ~]# cd nginx-1.16.1

# 3.生成
[root@qls ~]# mkdir /app
[root@qls nginx-1.16.1]# useradd nginx -s /sbin/nologin -M
[root@qls nginx-1.16.1]# ./configure --prefix=/app/nginx-1.16.1 --user=nginx --group=nginx

# 4.编译
[root@qls nginx-1.16.1]# make

# 5.安装
[root@qls nginx-1.16.1]# make install

# 6.检测配置文件有没有语法错误
[root@qls sbin]# /app/nginx-1.16.1/sbin/nginx -t
nginx: the configuration file /app/nginx-1.16.1/conf/nginx.conf syntax is ok
nginx: configuration file /app/nginx-1.16.1/conf/nginx.conf test is successful

# 7.启动nginx
[root@qls sbin]# /app/nginx-1.16.1/sbin/nginx

# 8.检测80端口
[root@qls sbin]# netstat -lntup|grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      13468/nginx: master

# 9.做软连接
[root@qls nginx-1.16.1]# ln -s /app/nginx-1.16.1 /app/nginx

2. 自制rpm包安装

[root@qls ~]# mkdir fpm
[root@qls ~]# mv fpm-1.3.3.x86_64.tar.gz fpm
[root@qls fpm]# cd /root/fpm/
​
# 1. 解压
[root@qls fpm]# tar xf fpm-1.3.3.x86_64.tar.gz

# 2.安装ruby
[root@qls fpm]# yum -y install ruby rubygems ruby-devel rpm-build

# 3.查看gem的源
[root@qls fpm]# gem sources --list
*** CURRENT SOURCES ***
https://rubygems.org/
​
# 4.更换阿里云的源 先移除国外源
[root@qls fpm]# gem sources --remove https://rubygems.org/
​
# 5.更换阿里云的源, 添加阿里云的源
[root@qls fpm]# gem sources -a https://mirrors.aliyun.com/rubygems/
​
# 6.使用gem命令安装当前目录下所有的.gem文件
[root@qls fpm]# gem install *.gem

# 7.写出安装rpm之后要执行的脚本
[root@qls ~]# vim /root/nginx.sh
#!/bin/bash
useradd nginx -s /sbin/nologin -M
ln -s /app/nginx-1.16.1 /app/nginx

# 8.使用fpm打包
[root@qls fpm]# fpm -s dir -t rpm -n nginx -v 1.16.1 -d 'zlib-devel,gcc,gcc-c++,glibc,pcre-devel,openssl-devel' --post-install /root/nginx.sh -f /app/nginx-1.16.1/

三、进程管理

进程的生命周期

1. 进程的监控ps

# 监控进程状态命令-ps
-A (-e)列出所有的行程
a:查看所有终端进程
x:查看所有的非终端进程
u:查看每个进程的用户
f:查看子进程

USER:启动该进程的用户
PID:进程的ID号
%CPU:占用cpu的百分比
%MEM:占用内存的百分比
VSZ:虚拟内存集(进程占用虚拟内存的空间)
RSS:真实物理内存(进程占用物理内存的空间)
TTY:运行的终端
?:内核运行的终端
tty:机器运行的终端
pts/0:远程连接的终端
STAT:进程的状:
      D:      #无法中断的休眠状态(通IO的进程)
      R:      #正在运行的状态
      S:      #处于休眠的状态
      T:      #暂停或被追踪的状态
      W:      #进入内存交换(从内核2.6开始无效)
      X:      #死掉的进程(少见)
      Z:      #僵尸进程
      <:      #优先级高的进程
      N:      #优先级较低的进程
      L:      #有些页被锁进内存
      s:      #父进程(在它之下有子进程开启着)
      l:      #以线程的方式运行
      |:      #多进程的
      +:      #该进程运行在前台
START:进程被触发启动的时间
TIME:进程实际使用cpu的时间
COMMAND:进程启动的命令

[root@qls ~]# ps auxf|grep nginx

o:自定义查看想要看的字段
ps axo user,pid,%cpu,%mem,command

--sort:排序,可以根据ps的所有字段
ps aux --sort %cpu

# 查看pid的额外命令
pgrep nginx
pidof nginx
  • ps -ef|grep nginx 与 ps -ef |grep [n]ginx 区别

2. 进程的管理top

[root@db01 ~]# top
=====================
top - 12:19:36 up  3:37,  2 users, load average: 0.00, 0.03, 0.05
# 12:19:36 :当前系统的时间
# up 3:37 :运行时长
# 2 users :当前登录的用户1
# load average: 0.00, 0.03, 0.05
服务器的负载:
0.00:1分钟的负载
0.03:5分钟的负载
0.05:15分钟的负载
​
Tasks: 105 total,   1 running, 104 sleeping,   0 stopped,   0 zombie
# 105 total:目前有105个工作任务
# 1 running:1个正在执行的
# 104 sleeping:104个在等待被执行的
# 0 stopped:没有被停止的
# 0 zombie:0个僵尸进程
​
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
# 0.0 us:用户态(user用户使用cpu的百分比)
# 0.3 sy:内核态(system系统进程占用cpu的百分比)
# 0.0 ni:优先级
# 99.7 id:CPU空闲程度
# 0.0 wa:(wait等待状态的进程)
# 0.0 hi:硬中断
# 0.0 si:软中断
# 0.0 st:虚拟机(如果当前系统安装了虚拟机)KVM,vitural box

-d:指定变化时间
-p:只查看指定PID的进程
-u:只查看指定用户的进程
-b:保存到文件
-n:指定次数

# top 常见指令
h   查看帮出
z   高亮显示
1   显示所有CPU的负载
s   设置刷新时间
b   高亮现实处于R状态的进程
M   按内存使用百分比排序输出
P   按CPU使用百分比排序输出
R   对排序进行反转
f   自定义显示字段
k   kill掉指定PID进程
W   保存top环境设置 ~/.toprc
q   退出

3. 什么是中断

  • 中断是系统用来影响硬件设备请求的一种机制,它会打断进程的正常调度和执行,然后调用内核中的中断处理程序来影响设备的请求。

四、系统平均负载

平均负载是指,单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数

1. 平均负载值

## 平均负载多少合理?

假设现在在4,2,1核的CPU上,如果平均负载为2时,意味着什么呢?

| 核心数 | 平均负载 | 含义                         |
| ------ | -------- | ---------------------------- |
| 4      | 2        | 有一半(50%)的CPU是空闲状态 |
| 2      | 2        | CPU刚好完全被占用            |
| 1      | 2        | 至少一半的进程是抢不到CPU    |

### 平均负载的三个数值我们该关注哪一个

**1.如果1分钟,5分钟,15分钟的负载数值相差不大,代表系统的负载很''稳定''**

**2.如果1分钟的值,远小于15分钟的值,那么证明系统的平均负载逐渐降低,但是15分钟区间,系统负载上升的原因需要知道**

**3.如果15分钟的值,远小于1分钟的值,那么证明系统的平均负载逐渐升高,有可能是临时的也有可能持续上升,需要观察**

**4.一旦1分钟的平均负载接近或超过了CPU的个数,就意味着,系统正在发生过载的问题,这时候就得分析问题了,并且要想办法优化。**

2. 平均负载实验

`stress`是Linux系统压力测试工具,这里我们用作异常进程模拟平均负载升高的场景。

`mpstat`是多核CPU性能分析工具,用来实时检查每个CPU的性能指标,以及所有CPU的平均指标。

`pidstat`是一个常用的进程性能分析工具,用来实时查看进程的CPU,内存,IO,以及上下文切换等性能指标。

**场景1:**4个CPU跑满
====================
[root@qls ~]# stress --cpu 4 --timeout 600

# watch
-d:变化部分高亮显示 

# 5秒钟检测一次所有指标
[root@qls ~]# mpstat -P ALL 5

# 5秒输出一组数据
[root@qls ~]# pidstat -u 5 1


**总结:**
=========
1.平均负载高有可能是CPU密集型进程导致的
2.平均负载高并不一定代表CPU的使用率就一定高,还有可能是I/O繁忙
3.当发现负载高时,可以使用mpstat、pidstat等工具,快速定位到,负载高的原因,从而做出处理

五、开机启动流程

1. CentOS6启动

1.内核引导

2.运行init

init 在CentOS中,是系统所有进程的起点,如果进程想启动,那必须有init,如果没有init,系统中的任何进程都不会启动,那就相当于这个系统打不开...所以init才是爸爸。

3.系统初始化

4.建立终端

5.用户登录

## 关机命令
init 0
halt
shutdown -h now
shutdown -h 20:20
shutdown -h +10
poweroff

## 重启命令
init 6
reboot
shutdown -r now
shutdonw -r 20:20
shutdown -r +10

2. 七个运行级别:

## 关机
0 - halt (Do NOT set initdefault to this)

## 单用户模式
1 - Single user mode

## 多用户模式(没有文件系统和网络)
2 - Multiuser, without NFS (The same as 3, if you do not have networking)

## 完整的多用户模式(命令行)
3 - Full multiuser mode

## 没有被使用级别
4 - unused

## 图形化界面
5 - X11

## 重启
6 - reboot (Do NOT set initdefault to this)

3. CentOS7开机启动

1.BIOS(开机自检)
2.MBR ( Master Boot Record 主引导记录)
3.GRUB2 Bootloader(引导菜单)
4.Kernel(内核引导)
5.Systemd (不再使用init,改成了systemd)
6.Runlevel-Target (运行级别)

运行级别:

init 0.target -> poweroff.target        # 关机
init 1.target -> rescue.target          # 单用户模式
init 2.target -> multi-user.target      # 多用户模式(没有文件系统和网络)
init 3.target -> multi-user.target      # 多用户模式(命令行)
init 4.target -> multi-user.target      # 多用户模式(还是没有被使用)        
init 5.target -> graphical.target       # 图形化模式
init 6.target -> reboot.target          # 重启
# 获取当前默认的运行级别
[root@qls ~]# systemctl get-default
multi-user.target

# 修改运行级别
[root@qls ~]# systemctl set-default poweroff

## 使用两条命令修改默认运行级别
[root@qls ~]# rm -f /etc/systemd/system/default.target
[root@qls ~]# ln -s /usr/lib/systemd/system/poweroff.target /etc/systemd/system/default.target


## 相关目录
[root@qls ~]# ll /etc/systemd/system   (默认的运行级别)
[root@qls ~]# ll /usr/lib/systemd/system (运行级别和服务启动脚本)

4. CentOS7单用户模式

  • 生产中可以用于密码忘却修改等的实现。

在linux16 行末,加上:enforcing=0 init=/bin/bash 修改完之后,按Ctrl + X

## 修改默认启动方式
bash-4.2# mount -o rw,remount /
bash-4.2# systectl set-default(不能用)
bash-4.2# rm -f /etc/systemd/system/default.target
bash-4.2# ln -s /usr/lib/systemd/system/multi-user.target /etc/systemd/system/default.target
bash-4.2# exec /sbin/init

## 修改密码
bash-4.2# mount -o rw,remount /
bash-4.2# echo 123|passwd --stdin root
bash-4.2# exec /sbin/init

方法2:

switch_root:/# mount -o rw,remount /sysroot
switch_root:/# chroot /sysroot
sh-4.2# systemctl set-default multi-user.target
sh-4.2# exit
switch_root:/# reboot

5.企业救援案例

案例一:忘记root密码

**救援模式: **

  • 1.将光驱中放入镜像,然后连接

  • 2.打开电源进入BIOS(右键单击——电源——打开电源时进入固件)

  • 3.选择boot界面,右键到boot——选择CD-ROM使用+跳到最上面
  • 4.保存退出,选择Exit——Exit Saving Changes——回车两次

  • 5.进入救援模式Troubleshooting

  • 6.进入救援模式Rescue a Centos system

  • 7.进入救援模式之后,选择继续,按1

  • 8.直接回车

  • 9.获取root的环境变量,修改密码
输入:chroot /mnt/sysimage回车
输入:echo 22 | passwd --stdin root回车
输入:exit回车
输入:reboot回车

# 使用init /bin/bash
==============
开机按e进入单用户模式,然后ro改为rw,输入:enforcing=0 init=/bin/bash
ctrl+x进入单用户模式
bash-4.2# mount -o rw,remount /
bash-4.2# echo 123|passwd --stdin root
bash-4.2# exec /sbin/init

# 使用 rd.break
==============
开机按e进入单用户模式,然后ro改为rw,输入:rd.break
ctrl+x进入单用户模式
switch_root:/# mount -o rw,remount /sysroot
switch_root:/# chroot /sysroot
sh-4.2# echo 123|passwd --stdin root
sh-4.2# exit
switch_root:/# reboot

案例二:修改运行级别为poweroff/reboot

  • 使用init /bin/bash(只能使用ln -s)
开机按e进入单用户模式,然后ro改为rw,输入:enforcing=0 init=/bin/bash
ctrl+x进入单用户模式

bash-4.2# mount -o rw,remount /sysroot/
sh-4.2# systemctl set-default multi-user.target
sh-4.2# exit
switch_root:/# reboot
  • 使用 rd.break(systemd)
开机按e进入单用户模式,然后ro改为rw,输入:rd.break
ctrl+x进入单用户模式
switch_root:/# mount -o rw,remount /sysroot
switch_root:/# chroot /sysroot
bash-4.2# rm -f /etc/systemd/system/default.target
bash-4.2# ln -s /usr/lib/systemd/system/multi-user.target /etc/systemd/system/default.target
bash-4.2# exet
  • 救援模式
进入命令
sh-4.2# chroot /mnt/sysimage
sh-4.2# systemctl set-default multi-user.target
sh-4.2# exit
sh-4.2# root

案例三:误损坏MBR

搭建环境:

输入:dd < /dev/zero >/dev/sda bs=1 count=446

重启确认:找不到操作系统

进入救援模式修复(进入方法与场景一一致)

获取root权限
sh-4.2# chroot /mnt/sysimage
修复
bash-4.2# grub2-install /dev/sda
退出
bash-4.2# exit
重启
sh-4.2# reboot

案例四:误删除GRUB菜单

搭建环境

[root@qls ~]# rm -fr /boot/grub2/
[root@qls ~]# reboot

进入救援模式修复(进入方法与场景一一致)

sh-4.2# chroot /mnt/sysimage
bash-4.2# grub2-install /dev/sda
bash-4.2# grub2-mkconfig -o /boot/grub2/grub.cfg
bash-4.2# exit
sh-4.2# reboot
Copyright © 2009 - Now . XPBag.com . All rights Reserved.
夜心的小站 » Linux 重定向 源码包 进程管理 系统负载 启动流程及管理

提供最优质的资源集合

立即查看 了解详情