Linux运维高级核心基础

定时任务 >>

检查crond服务相关的软件包
[root@localhost ~]# rpm -qa |grep cron
cronie-1.4.11-19.el7.x86_64
cronie-anacron-1.4.11-19.el7.x86_64
crontabs-1.11-6.20121102git.el7.noarch     #定时任务主程序包,提供crond守护进程等工具

检查crond服务是否运行
systemctl status crond

cron是Linux系统中以后台进程默认周期性执行命令或指定程序任务的服务软件名。Linux系统启动后cron软件会自动自动,对应的进程名叫crond。默认是定期(每分钟)检查系统中是否有需要执行的任务计划,如果有则按计划进行。若以秒为单位的计划任务,则需要编写shell更为合适。

at命令

用于在指定时间执行命令。at定时任务工具,依赖于atd服务,使用于执行一次就结束的调度任务。例如突发任务,某天夜里三点需要临时性备份数据,可以使用at软件。

安装启动
yum install at -y
systemctl start atd

选项:
-f 指定包含具体指令的任务文件
-q 指定新任务的队列名称
-l 显示待执行任务的列表
-d 删除指定的带执行任务
-m 任务执行完成后向用户发送e-mail

参数
日期时间:指定任务执行的日期时间
hh:mm  小时:分钟
mm/dd/yy 月/日/年 或 日月年
noon  正午12点
midnight 午夜12点
teatime 下午茶时间,下午四点
tomorrow 明天
now+1min  一分钟之后
还能使用12小时计时制,AM上午,PM下午
 now+1min/hours/days/weeks  可以是分钟,小时,天,星期
 
 
 案例:
[root@localhost ~]# at now+2min
at> tree /opt
at> <EOT>       #ctrl+d提交
job 5 at Sat Feb 13 11:41:00 2021
查看
[root@localhost ~]# at -l
5	Sat Feb 13 11:41:00 2021 a root
执行完毕可以在邮件中查看执行情况
[root@localhost ~]# mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/root": 3 messages 1 new
    1 root                  Sat Feb 13 11:19  16/595   "Output from your job        3"
    2 root                  Sat Feb 13 11:20  34/874   "Output from your job        4"
>N  3 root                  Sat Feb 13 11:41  20/601   "Output from your job        5"
& 3
Message  3:
From root@localhost.localdomain  Sat Feb 13 11:41:00 2021
Return-Path: <root@localhost.localdomain>
X-Original-To: root
Delivered-To: root@localhost.localdomain
Subject: Output from your job        5
To: root@localhost.localdomain
Date: Sat, 13 Feb 2021 11:41:00 +0800 (CST)
From: root@localhost.localdomain (root)
Status: R

/opt
├── anaconda-ks.cfg
├── a.txt
├── b.txt
└── data.txt

0 directories, 4 files

可以通过读取任务,不用交互式输入
[root@localhost ~]# ls /dw
[root@localhost ~]# cat mytasks.at 
touch /dw/1.txt
[root@localhost ~]# at -f ./mytasks.at now+1min
job 8 at Sat Feb 13 11:57:00 2021
[root@localhost ~]# ls /dw/
1.txt

删除任务
[root@localhost ~]# at -l
[root@localhost ~]# at now+10min
at> touch /dw/2.txt        
at> <EOT>
job 9 at Sat Feb 13 12:08:00 2021
[root@localhost ~]# at -l
9	Sat Feb 13 12:08:00 2021 a root
[root@localhost ~]# at -d 9
[root@localhost ~]# at -l

mail命令

了解三个概念:
MTA:邮件传送代理,也就是postfix服务
MUA:收费邮件的客户端,可以是foxmail,也可以是其他客户端
centos7通过mailx发送邮件,通过mail命令是收邮件。

[root@localhost ~]# mailx -s "hello root" root
hao are you?
happy new year
EOT
[root@localhost ~]# mail 
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/root": 3 messages 1 new
    1 root                  Sat Feb 13 11:19  16/595   "Output from your job        3"
    2 root                  Sat Feb 13 11:54  15/510   "Output from your job        6"
>N  3 root                  Sat Feb 13 12:54  19/630   "hello root"
& 

定时任务实践

向crond进程提交任务的方式与at不同,crond需要读取配置文件,且有固定的文件个数,通过crontab命令管理文件。cron任务分为两类:系统定时任务,用户定时任务。

crond服务除了工作时查看/var/spool/cron文件夹下的定时任务以为,还会查看/etc/cron.d目录以及/etc/anacrontab下面的内容,里面存放了每天,每周,每月需要执行的系统任务。

[root@localhost ~]# 
[root@localhost ~]# ll /etc/|grep cron*
-rw-------.  1 root root    541 Apr 11  2018 anacrontab
drwxr-xr-x.  2 root root     21 Dec 29 03:42 cron.d
drwxr-xr-x.  2 root root     42 Dec 29 03:42 cron.daily
-rw-------.  1 root root      0 Apr 11  2018 cron.deny
drwxr-xr-x.  2 root root     22 Dec 29 03:42 cron.hourly
drwxr-xr-x.  2 root root      6 Jun 10  2014 cron.monthly
-rw-r--r--.  1 root root    451 Jun 10  2014 crontab
drwxr-xr-x.  2 root root      6 Jun 10  2014 cron.weekly

系统定时任务配置文件/etc/crontab
[root@localhost ~]# cat /etc/crontab 
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root				#执行结果发邮件给用户

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
定时任务必须使用绝对路径,五个星号分别对应--分时日月周。

crontab命令

crontab命令用来提交个管理用户需要周期性执行的任务。
定时任务相关的文件
/var/spool/cron 定时任务的配置文件所在目录
/var/log/cron 定时任务日志文件
/etc/cron.deny 定时任务黑名单

参数:
-l  查看定时任务
-e  edit编辑定时任务,建议手动编辑
-i  删除定时任务,提示用户确认删除,避免出错
-r  删除定时任务,移除/var/spool/cron/username
-u  指定用户执行任务,root可以管理普通用户计划任务
crontab命令就是在修改//var/spool/cron中的定时任务文件
例如:
[root@localhost ~]# cat  /var/spool/cron/root 
*/1 * * * * /usr/sbin/ntpdate  ntp1.aliyun.com &>/dev/null
*/1 * * * * /bin/sh /myscripts/bak.sh > /dev/null 2>&1

定时任务状态
[root@localhost ~]# ps -ef | grep crond
root        715      1  0 10:50 ?        00:00:00 /usr/sbin/crond -n
root       1740   1374  0 13:39 pts/0    00:00:00 grep --color=auto crond

[root@localhost ~]# systemctl is-active crond
active

例:
查看定时任务
[root@localhost ~]# crontab -l
no crontab for root

创建定时任务
crontab -e

删除定时任务
建议使用crontab -e 手动编辑

定时任务符号
五个星号分别对应分时日月周,day of month 和 day of week 一般不同时使用

特殊符号含义
*表示每的意思
-表示范围分隔符,如17-19,代表每天的17到19点
,逗号表示分隔时段,如30 17,18,19* cmd 表示每天的17,18,19的半点执行命令
/n表示可以整除的数字,如每隔n的单位时间,如每隔10分钟表示/10* cmd

如果没法整除,定时任务没有意义,可以通过脚本控制频率。

示例:
0 * * * *  表示每小时的整点执行
*/10 * * * * 每隔10分钟执行一次
0 9-18 * * 1-5 工作日的9-18点每一个整点执行
* 13,15 * * 6,0  每周六周日的13点到15点,每分钟都执行

定时任务实践

每分钟让服务器进行时间同步
[root@localhost ~]# which ntpdate 
/usr/sbin/ntpdate
[root@localhost ~]# crontab -e
crontab: installing new crontab
[root@localhost ~]# crontab -l
*/1 * * * * /usr/sbin/ntpdate  ntp1.aliyun.com &>/dev/null
#能复制尽量不要手敲
测试
[root@localhost ~]# date -s 20080808
Fri Aug  8 00:00:00 CST 2008
[root@localhost ~]# date
Sat Feb 13 15:10:31 CST 2021

每晚0点整,把站点目录/var/www/html下的内容打包备份到/data目录下
1.检查文件夹是否存在,不存在则创建
[root@localhost ~]# test -d /data && echo "exist" || mkdir /data
[root@localhost ~]# test -d /data && echo "exist" || mkdir -p /var/www/html
exist

2.创建测试文件
[root@localhost ~]# touch /var/www/html/appach{1..5}.txt

3.打包压缩,tar命令不建议使用绝对路径,特殊情况下可以使用-P参数
打包时切换到上级目录打包
[root@localhost www]# pwd
/var/www
[root@localhost www]# tar -czvf /data/bak_$(date +%F).tar.gz  ./html/
[root@localhost www]# ls /data/
bak_2021-02-13.tar.gz

4.编写shell脚本,丢给定时任务定期执行
[root@localhost myscripts]# cat bak.sh 
!#/bin/bash
cd /var/www && \
/usr/bin/tar -zcf /data/back_$(date +%F).tar.gz  ./html

5.创建定时任务
[root@localhost ~]# crontab -e
crontab: installing new crontab
[root@localhost ~]# crontab -l
00 00 * * * /bin/sh /myscripts/bak.sh > /dev/null 2>&1

总结:
命令行测试
定时任务推荐脚本执行
命令全路径复制到脚本
不要随意输出信息,输出到文件或空
打包时切换到上级目录打包
在指定用户下执行相关定时任务,不要什么都给root执行
最新的定时任务放在最上面
调式方法不能用于生产环境
调式可以参考cron日志,/var/log/cron

软件包管理 >>

rpm命令

rpm软件包的管理工具

i表示安装,v显示详细过程,h以进度条显示,每个#表示2%进度
常用命令:
rmp -qa 查看软件是否安装
rpm -ivh 安装rpm软件
rpm -ql 查看软件详细信息
rpm -qf 查看目录属于的安装包
rpm -e 卸载软件

yum工具

基于rpm的软件包管理器

参数:
-h 显示帮助
-y 对所有的提问都回答 “yes”
-c 指定配置文件
-q 安静模式
-v 详细模式
-R 设置yum处理一个命令的最大等待时间
-C 完全从缓冲中运行,而不去下载或更新任何头文件

常用参数:
install 安装rpm软件包
update  更新rpm软件包
remove 删除指定的rpm软件包
list 显示软件包的信息
clean 清理yum过期的缓存
localinstall 安装本地的rpm软件包
localupdate 显示本地rpm软件包进行更新
makecache 构建缓存

其他参数:
deplist 显示软件包的所有依赖关系
check-update 检查是否有可用的更新rpm软件包
search 检查软件包的信息  [search 译文:寻找,搜索]
info 显示指定的rpm软件包的描述信息和概要信息
resolvedep  显示软件包的依赖关系
shell 进入yum的shell提示符

案例:
更新和升级
更新指定程序包package1
yum update package1  

删除程序
yum remove  删除程序包

查找和显示
#检查MySQL是否安装
yum list installed  |grep mysql
yum list installed  mysql*

显示安装包信息
yum info package1

显示所有已安装和可安装的程序包
yum list

显示指定程序包安装情况
yum list package1

清除缓存
清除缓存目录下的软件包
yum clean packages

配置yum源与epel源

yum install wget -y  screen
cd /etc/yum.repos.d/   && mkdir backup_$(date +%F)
mv ./*.repo  backup_
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum makecache

可参考阿里镜像站。
如何使用光盘当中本地yum仓库
如何使用光盘当作本地yum仓库:
(1) 挂载光盘至某目录,例如/media/cdrom
    # mount -r -t iso9660 /dev/cdrom /media/cdrom
(2) 创建配置文件
[CentOS7]
name=
baseurl=
gpgcheck=
enabled=

案例:
1.创建配置文件
[root@kvm01 opt]# cat /etc/yum.repos.d/local.repo 
[local]
name=local repo
baseurl=file:///mnt
gpgcheck=0

2.挂载
[root@kvm01 ~]# mount /dev/cdrom /mnt
编译安装三部曲
./configure  --prefix=软件安装路径  #在源码目录
make
make install (make uninstall是卸载)

磁盘管理 >>

fdisk 对磁盘进行格式化发命令,以及分区等。

mbr分区表(dos格式)
master boot record 主分区引导记录
mbr分区关注的是,硬盘容量受限制,最大2T

gpt分区表
限制大多的硬盘分区都是gpt分区表
优点:
-gpt分区表硬盘容量没有限制
-分区个数,没有限制
-自带磁盘包包含机制

fdisk

查看磁盘使用情况和磁盘分区

选项:
-v 打印fdisk的版本信息并退出
-l 列出指定设备的分区表信息并退出
-u 以扇区数而不是以柱面数的形式显示分区表中各分区的信息
-s 分区;将分区的大小 (单位为块)信息输出到标准输出

内部参数:
命令(输入m获取帮助):
n  创建分区
d  删除已有分区
t  修改分区类型
l  列出已知分区类型
w  保持并退出
q  不保存退出
m  查看帮助信息
p  显示现有分区信息

案例:
[root@localhost ~]# fdisk -l /dev/sda 

Disk /dev/sda: 42.9 GB, 42949672960 bytes, 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0009dfa2

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     4098047     2048000   83  Linux
/dev/sda2         4098048     8194047     2048000   82  Linux swap / Solaris
/dev/sda3         8194048    83886079    37846016   83  Linux

分区实践

在vm虚拟机添加二块硬盘进行练习

1.查看硬盘情况
[root@localhost ~]# fdisk -l | grep sd
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 sectors
Disk /dev/sda: 42.9 GB, 42949672960 bytes, 83886080 sectors
/dev/sda1   *        2048     4098047     2048000   83  Linux
/dev/sda2         4098048     8194047     2048000   82  Linux swap / Solaris
/dev/sda3         8194048    83886079    37846016   83  Linux


2.选择需要操作的磁盘开始分区
[root@localhost ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x37a0153b.

Command (m for help): p  #打印现有分区,或输入m查看帮助信息

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x37a0153b   #新加磁盘没有分区

   Device Boot      Start         End      Blocks   Id  System

Command (m for help): n #输入n,添加分区
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p	#输入p,添加主分区
Partition number (1-4, default 1): 1    #选择1-4主分区区号
First sector (2048-41943039, default 2048):  #选择默认起点2048
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +256M   #填写结束点,使用需要创建的大小替换
Partition 1 of type Linux and of size 256 MiB is set

Command (m for help): P  #再次打印

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x37a0153b    #此时添加了第一个主分区,信息如下:

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048      526335      262144   83  Linux
						# 删除结束点是526335*512=269MB
Command (m for help): N  #再次创建扩展分区
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): e    #剩余磁盘空间全部创建扩展分区
Partition number (2-4, default 2): 2   #选择区号为2
First sector (526336-41943039, default 526336): 
Using default value 526336   #默认值为526336
Last sector, +sectors or +size{K,M,G} (526336-41943039, default 41943039): 
Using default value 41943039   #默认全部给扩展分区
Partition 2 of type Extended and of size 19.8 GiB is set
						#此时剩余空间全部给了扩展分区,大小为19.8GB
Command (m for help): n  #开始创建逻辑分区,分区号默认从5开始
Partition type:
   p   primary (1 primary, 1 extended, 2 free)
   l   logical (numbered from 5)
Select (default p): l  # 输入l 创建逻辑分区
Adding logical partition 5   #选择区号5
First sector (528384-41943039, default 528384): 
Using default value 528384   #默认大小528384开始
Last sector, +sectors or +size{K,M,G} (528384-41943039, default 41943039): +10G	#大小设置为10G
Partition 5 of type Linux and of size 10 GiB is set

Command (m for help): p  #再次打印分区

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x37a0153b			

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048      526335      262144   83  Linux
/dev/sdb2          526336    41943039    20708352    5  Extended
/dev/sdb5          528384    21499903    10485760   83  Linux

Command (m for help): n  #再创建一个逻辑分区
Partition type:
   p   primary (1 primary, 1 extended, 2 free)
   l   logical (numbered from 5)
Select (default p): l   #选择逻辑分区
Adding logical partition 6    #选择分区号6
First sector (21501952-41943039, default 21501952): 
Using default value 21501952
Last sector, +sectors or +size{K,M,G} (21501952-41943039, default 41943039): 
Using default value 41943039
Partition 6 of type Linux and of size 9.8 GiB is set	#sdb6逻辑分区,9.6G大小

Command (m for help): p

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x37a0153b

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048      526335      262144   83  Linux
/dev/sdb2          526336    41943039    20708352    5  Extended
/dev/sdb5          528384    21499903    10485760   83  Linux
/dev/sdb6        21501952    41943039    10220544   83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.


3.此时系统出现磁盘文件
[root@localhost ~]# ll /dev/sdb*
brw-rw---- 1 root disk 8, 16 Feb 14 19:44 /dev/sdb
brw-rw---- 1 root disk 8, 17 Feb 14 19:44 /dev/sdb1
brw-rw---- 1 root disk 8, 18 Feb 14 19:44 /dev/sdb2
brw-rw---- 1 root disk 8, 21 Feb 14 19:44 /dev/sdb5
brw-rw---- 1 root disk 8, 22 Feb 14 19:44 /dev/sdb6


4.分区后信息会写入/proc/partitions
[root@localhost ~]# cat /proc/partitions 
major minor  #blocks  name

   8       16   20971520 sdb
   8       17     262144 sdb1
   8       18          1 sdb2
   8       21   10485760 sdb5
   8       22   10220544 sdb6
   8       32   20971520 sdc
   8        0   41943040 sda
   8        1    2048000 sda1
   8        2    2048000 sda2
   8        3   37846016 sda3
  11        0    4365312 sr0

partprobe命令

centos5或以前使用此命令,可用用于重读分区表,当删除文件后,仍然占用磁盘空间,是因为磁盘分区表没有更新,需要重启分区表,可用使用此命令,不重启电脑,重读分区表。

partprobe /dev/sdb   #重读磁盘/dev/sdb的分区表

partx命令

一般格式化磁盘完毕后会使用partx命令告诉Linux内核,新的磁盘分区情况,让内核重读分区表。

partx -a /dev/sdb    #内核重读分区表

[root@localhost ~]# partx -a /dev/sdb
partx: /dev/sdb: error adding partitions 1-2
partx: /dev/sdb: error adding partitions 5-6

parted命令

磁盘分区和分区大小调整工具

parted命令 是由GNU组织开发的一款功能强大的磁盘分区和分区大小调整工具,与fdisk不同,它支持调整分区的大小。作为一种设计用于Linux的工具,它没有构建成处理与fdisk关联的多种分区类型,但是,它可以处理最常见的分区格式,包括:ext2、ext3、fat16、fat32、NTFS、ReiserFS、JFS、XFS、UFS、HFS以及Linux交换分区。


语法:parted (选项)(参数)

选项:
-h 显示帮助信息
-i 交互式模式
-s 脚本模式,不提示用户
-v 显示版本号
-l 显示所有分区信息

针对超过2TB的磁盘分区

小于2TB的磁盘都可用使用fdisk分区,但是大于2TB的磁盘,只能使用parted命令分区,且转换磁盘为GPT格式。

1.使用20G硬盘模拟
[root@localhost ~]# fdisk -l |grep /dev/sdc
Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 sectors

2.parted针对/dev/sdc磁盘分区,GPT分区表没有extend(扩展)类型
[root@localhost ~]# parted /dev/sdc
GNU Parted 3.1
Using /dev/sdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) help      #输入help获取帮助
(parted) mklabel gpt   #指定分区表格式
(parted) mkpart primary 0 500  #输入mkpart创建分区类型,并指定大小0 500                   
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? Ignore     #忽略警告信息 /取消   
(parted) p       #打印信息                                                         
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End    Size   File system  Name     Flags
 1      17.4kB  500MB  500MB               primary

(parted) mkpart logical 501 10000  #继续创建逻辑分区并指定大小   
(parted) p                                                                
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags
 1      17.4kB  500MB   500MB                primary
 2      501MB   10.0GB  9499MB               logical

(parted) mkpart logical 10001      #继续创建逻辑分区,并指定大小   
End?                                                                      
End? 21000
(parted) p                                                                
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags
 1      17.4kB  500MB   500MB                primary
 2      501MB   10.0GB  9499MB               logical
 3      10.0GB  21.0GB  11.0GB               logical

(parted) q   #输入q保存退出                                                     
Information: You may need to update /etc/fstab.

[root@localhost ~]#

3.使用fdisk命令检查sdb磁盘情况
[root@localhost ~]# fdisk -l /dev/sdc 
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt
Disk identifier: 28ED4D51-6F7D-4939-8321-4BC94564EA35


#         Start          End    Size  Type            Name
 1           34       976562  476.8M  Microsoft basic primary
 2       978944     19531775    8.9G  Microsoft basic logical
 3     19533824     41015295   10.2G  Microsoft basic logical

4.更换gpt为mbr
fdisk 命令是针对mbr分区格式的,虽然可用使用g命令把从旁格式化为GPT,但是无法再重新格式化为MBR。因为fdisk命令无法操作GPT格式的磁盘,可用使用parted命令更好磁盘分区格式。
# parted  /dev/sdb    //选中要转换到的磁盘 (parted)  mktleb  New disk label type? msdos 
按照习惯MBR格式一般在linux下称作dos,如果在new disk  label type?后输入dos或者mbr会提示无效命令,这时要用help mktable查看帮助信息。可以看到parted命令中MBR 分区被称作msdos,
其他分区如下:aix;amiga;bsd;dvh;gpt;mac;msdos;pc98;sun;loop
 
 实践:
[root@localhost ~]# parted /dev/sdc
GNU Parted 3.1
Using /dev/sdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mktable 
New disk label type? msdos
Warning: The existing disk label on /dev/sdc will be destroyed and all data on this disk
will be lost. Do you want to continue?
Yes/No? yes                                                               
(parted) p                                                                
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start  End  Size  Type  File system  Flags

(parted) q                                                                
Information: You may need to update /etc/fstab.

Linux的软硬链接 >>

ln命令

用来为文件创建链接

选项:
-s  对源文件建立符号链接,而非硬连接
-f  强行删除任何已存在的目标文件
--help 显示帮助信息并退出
--version 显示版本信息并退出

软链接创建–symbolic link

语法:
ln -s 目标文件绝对路径   快捷方式绝对路径

例[root@localhost ~]# ln -s /opt/data.txt  /tmp/data

特点:
软连接是两个独立的文件,有各自的iNode,创建软连接不会增加符号引用计数
支持目录软链接,可以跨文件系统
软链接文件类型是l
软链接指向源文件,若源文件不存在了软连接失效

作用:便于访问

硬链接创建–hard link

语法:
ln 目标文件绝对路径  硬连接的文件路径

例:
ln  /opt/data.txt  /root/aaa
ln  /opt/data.txt  /root/bbb

对比软连接:
[root@localhost ~]# readlink /tmp/data 
/opt/data.txt
[root@localhost ~]# readlink aaa
[root@localhost ~]# readlink bbb
#硬链接看不到信息

特点:
iNode号码与源文件一致
目录文件夹不支持硬连接
不得跨文件系统
硬连接文件类型是 -
硬链接数量的增加,会增加iNode号码的计数
[root@localhost ~]# ls -li  /opt/data.txt 
24669 -rw-r--r-- 3 root root 145 Feb 10 22:37 /opt/data.txt
#因为前面创建了硬链接aaa和bbb,所有此处为三,默认为一。

作用:防止误删

软硬链接的综合比较

删除软链接对源文件,硬链接无影响
删除硬链接对源文件,软链接无影响
删除源文件对硬连接无影响,软链接失效
只要删除源文件,硬连接(数量为0),文件才会失效
许多硬件的快照功能就是硬连接的道理
源文件和硬链接有相同的iNode号,可以理解为同一个文件或者是一个文件多个入口
软链接与源文件的iNode号不同,是不同的文件,软链接是源文件难道快捷节方式

文件夹的链接数量

1.文件夹创建后,默认有.和..两个目录
		.的inode号就是当前目录的inode号,如同硬链接
		..的inode号是上级目录的inode号,如同父目录的硬链接

因此任意一个目录,硬链接基数都是2(目录名+当前目录名)
[root@localhost dw]# ls -lia
total 4
67266023 drwxr-xr-x   2 root root    6 Feb 14 22:58 .
      64 dr-xr-xr-x. 21 root root 4096 Feb 13 15:13 ..
[root@localhost dw]# ls -lia /dw
total 4
67266023 drwxr-xr-x   2 root root    6 Feb 14 22:58 .
      64 dr-xr-xr-x. 21 root root 4096 Feb 13 15:13 ..


2.文件夹系统禁止创建硬链接

iNode号

操作系统中专门用于管理存储文件的信息软件称之为文件系统,文件系统将文件的元信息(文件创建者,日期,大小等,可以通过stat命令查看元信息)存储再一个称之为inode的区域,中文是索引节点。

1.查看文件的iNode号
[root@localhost ~]# ls -li
total 72
67185213 -rw-r--r-- 1 root root   9 Feb 10 21:36 1.doc
67185953 -rw-r--r-- 1 root root   0 Feb 13 11:56 1.txt
67185211 -rw-r--r-- 1 root root   4 Feb 10 21:36 2.doc
#唯独文件名不说inode存储的数据信息

inode存储的信息不限于:
文件大小
属主
用户组
文件权限
文件类型
修改时间
还包含了文件的文件实体指针(指向block的位置,也就是inode和block的关系)

inode大小

硬盘格式化的时候,系统自带分为两个区,一个数据区,存放数据,一个是inode区,存放inode信息。
每个inde节点大小,一般是128字节或256字节,inode节点的总数再格式化的时候就决定了。

查看和管理inode
无论是硬盘,U盘等再Linux中被格式化为ext系统的文件系统后,都分为两部分

inode,默认128或256字节
block,默认1-4k
一般磁盘分区都很大,inode和block都会有很多个

查看文件系统inode总数以及剩余数量
df -i  如果满了删除大量小文件,存储了过多的元信息,小于1kb的文件
df -h  如果满了,删除大容量的文件
[root@localhost ~]# df -i
Filesystem       Inodes IUsed    IFree IUse% Mounted on
/dev/sda3      18923008 63130 18859878    1% /
devtmpfs         480203   398   479805    1% /dev
tmpfs            482946     1   482945    1% /dev/shm
tmpfs            482946  1230   481716    1% /run
tmpfs            482946    16   482930    1% /sys/fs/cgroup
/dev/sda1       1024000   327  1023673    1% /boot
tmpfs            482946     1   482945    1% /run/user/0
[root@localhost ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        37G  1.9G   35G   6% /
devtmpfs        1.9G     0  1.9G   0% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           1.9G   12M  1.9G   1% /run
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sda1       2.0G  134M  1.9G   7% /boot
tmpfs           378M     0  378M   0% /run/user/0

文件系统管理 >>

vfs文件系统

virtualenv  file  system  虚拟文件系统

Linux的系统文件格式有

ext2;centos5:ext3;centos6:ext4;centos7:xfs

网络共享文件系统

nfs网络文件系统,访问网络中其他主机的文件就像是自己的计算机一样
smb服务消息块

集群文件系统

gfs   是谷歌公司为了存储海量的数据而开发的文件系统
ocfs  是由Oracle开发并在GNU通用公共许可证下发布的共享磁盘文件系统。主要是为了适应使用集群计算的       Oracle数据库管理系统。 

分布式文件系统:
ceph   为了存储的可靠性和扩展性的分布式文件系统

交互式文件系统

swap  区别主要在于是否是日志型文件系统

文件系统管理工具

创建文件系统

mkfs命令 把分区格式化为某种文件系统
例:
mkfs.xfs
mkfs.ext4
mkfs.ext3

修复文件系统

fsck
检查并修复Linux文件系统
例:fsck.ext4

查看文件系统熟悉

dumpe2fs命令用于打印文件系统的超级块和块组信息,用于ext2 ext3 ext4文件
centos使用的xfs文件系统,使用xfs_info命令查看分区信息

调整文件系统特性

tune2fs 
调整/查看ext2/ext3文件系统的文件系统参数,windows系统如果出现以为断电死机情况,下次开机一般都会出现系统自检。Linux系统下面也有文件系统自检,而且是可以通过tune2fs命令,自行定义检查周期及方式

-c max-mount-counts  设置强制自检的挂载次数, -1 表示关闭
# tune2fs -c 30 /dev/hda1           #设置强制检查前文件系统可以挂载的次数
# tune2fs -c -l /dev/hda1           #关闭强制检查挂载次数限制。

列出所有设备的关系,文件系统

lsblk  列出所有的块设备,而且还能显示他们直接的依赖关系
[root@localhost ~]# lsblk -f
NAME   FSTYPE  LABEL           UUID                                 MOUNTPOINT
sda                                                                 
├─sda1 xfs                     0000ad5b-4720-445d-bae7-a52c162526bd /boot
├─sda2 swap                    90584313-a6b2-452d-adc9-309b9c1d2e75 [SWAP]
└─sda3 xfs                     4b9ab61d-e5b3-4e59-8ff4-bbbb7f29a46d /
sdb    xfs                     1254287b-76bb-443b-b940-bce2b556bf28 
sdc                                                                 
sr0    iso9660 CentOS 7 x86_64 2018-05-03-20-55-23-00 

格式化文件系统

将刚分区好的磁盘格式化文件系统

1.格式化xfx文件系统
[root@localhost ~]# mkfs.xfs -f /dev/sdc

[root@localhost ~]# lsblk -f -a |grep sdc
sdc    xfs                     a3aad73e-cd92-44dc-a435-11b12c69f761 

2.格式化为ext4
[root@localhost ~]# mkfs.ext4  /dev/sdb

[root@localhost ~]# lsblk -f -a |grep sdb
sdb    ext4                    16e92da4-de30-455c-849f-15c71141efb0 

关闭文件系统自检

[root@localhost ~]# tune2fs -c -1 /dev/sdb
tune2fs 1.42.9 (28-Dec-2013)
Setting maximal mount count to -

如果有需要将GPT改为MBR,还得是parted命令,fdisk命令无效

修改命令如下:
[root@localhost ~]# parted /dev/sdb
GNU Parted 3.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mktable     #输入格式化命令                                                     
New disk label type?                                                      
New disk label type? msdos   #这是是更好文明MBR格式
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk
will be lost. Do you want to continue?
Yes/No? yes       #确认格式化                                                        
(parted) q                #保存退出                                                
Information: You may need to update /etc/fstab.

fsck

用于检查并且试图修复文件系统中的错误。当文件系统发送错误,可用fsck尝试修复。
Linux再开机时,系统会自带调用命令进行需要自检的磁盘检查。

参数:
-a 自动修复文件系统,不询问任何问题
-A 依照/etc/fstab配置文件的内容,检查文件内所列的全部文件系统
-N 不执行指令,仅列出时间执行会进行的动作
-P 当搭配-A参数使用时,则会同时检查所有文件系统
-r 采用互动模式,再执行修复时询问问题,让用户得以确认并决定处理方式
-R 当搭配-A参数使用时,则会略过/目录的文件系统不予检查
-s 依序执行检查作业,而非同时执行
-t<文件系统类型>  指定要检查的文件系统类型
-T 执行fsck指令时,不显示标题信息
-v 显示指令执行过程

系统开机过程会读取/etc/fstab文件,最后一列为1 或 2 ,磁盘再开机时候会调用fsck自检
[root@localhost ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Tue Dec 29 03:41:24 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=4b9ab61d-e5b3-4e59-8ff4-bbbb7f29a46d /                       xfs     defaults        0 0
UUID=0000ad5b-4720-445d-bae7-a52c162526bd /boot                   xfs     defaults        0 0
UUID=90584313-a6b2-452d-adc9-309b9c1d2e75 swap                    swap    defaults        0 0

最后一列0表示不对磁盘检查,1是检查

针对磁盘进行修复检查
fsck -t 文件系统类型  设备名

检查ext4类型的分区/dev/sdb
[root@localhost ~]# fsck -t ext4 /dev/sdb

mkfs

Linux mkfs命令用于再特定的分区上简历Linux文件系统

参数:
-f 强制覆盖
device  预备检查的硬盘分区,例如:/dev/sda1
-V 详细显示模式
-t <文件系统类型> 指定要建立何种文件系统

例如:
格式化文件系统
[root@localhost ~]# lsblk -f -a | grep sdb
sdb    ext4                    16e92da4-de30-455c-849f-15c71141efb0 
[root@localhost ~]# mkfs.xfs -f /dev/sdb
meta-data=/dev/sdb               isize=512    agcount=4, agsize=1310720 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5242880, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@localhost ~]# lsblk -f -a | grep sdb
sdb    xfs                     800501c6-20bc-4a88-9717-11ed08a75a87 

lsblk

列出块设备信息

安装:yum install util-linux-ng
常见参数:
-a 显示所有设备
-b 以bytes方式显示设备大小
-d 不显示slaves或holders
-f 显示文件系统信息
-h 显示帮助信息
-m 显示权限信息
-l 使用列表格式显示
-n 不显示标题
-o 输出列
-r 使用原始格式显示
-t 显示拓扑结构信息

案例:
lsblk命令默认情况下将以树状列出所有设备块
[root@localhost ~]# lsblk 
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   40G  0 disk 
├─sda1   8:1    0    2G  0 part /boot
├─sda2   8:2    0    2G  0 part [SWAP]
└─sda3   8:3    0 36.1G  0 part /
sdb      8:16   0   20G  0 disk 
sdc      8:32   0   20G  0 disk 
sr0     11:0    1  4.2G  0 rom  

七个列名称含义:
NAME:块设备名
MAJ:MIN:显示主要和次要设备号
RM:显示设备是否是可移动设备,在本例sr0的RM值等于1,说明它是可移动设备
SIZE:设备容量大小,
RO:表明设备是否为只读,在本例中所有设备的RO值为0 ,表明他们不是只读的
TYPE:显示块设备是否是磁盘或磁盘上的一个分区。在本例中,sda和sdb是磁盘,而sr0是只读存储(rom)。
MOUNTPOINT:之处设备挂载的挂载点

总结:

xfs文件系统, 用xfs_info显示信息;使用xfs_admin修改信息
ext3 ext4 用dumpepefs显示信息,用tune2fs修改信息

磁盘设备的挂载 >>

Linux下设备不挂载无法使用,挂载通常是将一个存储设备挂载到另一个以及存在的文件夹中,访问这个文件,就可用访问该存储设备的内容了。

一个新的硬盘插到机器上,分区之后,针对分区格式化文件系统
此时还未挂载分区,分区还只是一个封闭的空间,无法读写
针对分区和Linux的文件夹,合并,管理,挂载,即可通过访问被挂载的文件夹查看到磁盘的数据

mount命令

用于挂载Linux系统外的文件

语法:mount 挂载的设备 挂载点
参数:
-l  显示系统所有挂载的设备信息
-a 加载文件/etc/fstab中设置的所有设备
-t 指定设备的文件系统类型,如果不指定,mount自行选择挂载的文件类型

-o 添加挂载选项,是安全,性能优化的重要参数
-r read 只读,-o ro 挂载后的设备是只读的
-w 读写参数,等于-o rw权限

对应mount的-o参数:

参数含义
async以异步方式处理文件系统i/o操作,数据不会同步写入磁盘,而是写到缓冲区,提高系统性能,但损失数据安全性。
sync所有i/o操作同步处理,数据同步写入磁盘,性能较弱,数据安全性高
atime/noatime文件被访问时是否修改时间戳,不更改时间,可用提高磁盘i/o速度
auto/noauto通过-a参数可用自动被挂载/不自动挂载
defaults默认值包括rw,suid,dev,exec,auto,nouser,async,/etc/fstab大多默认值
exec/noexec是否允许执行二进制程序,取消提供安全性
suid/nosuid是否允许suid特殊权限生效
remount重新挂载
ro只读
rw读写
user/nouuser是否允许普通用户挂载
xfs文件系统,mount多出很多新选项
#显示已经挂载情况
[root@localhost ~]# mount -l |grep /dev/sd
/dev/sda3 on / type xfs (rw,relatime,attr2,inode64,noquota)
/dev/sda1 on /boot type xfs (rw,relatime,attr2,inode64,noquota)

#分区/dev/sda1挂载在 /boot文件夹,文件类型是xfs,参数是(rw,relatime,attr2,inode64,noquota)
rw 读写
relatime mount 选项 relatime (relative atime的意思)。relatime的意思是访问文件时,仅在atime早于文件的更改时间对atime进行更新。
attr2  在磁盘上存储内联扩展属性,提示性能
inode64 允许在文件系统的任意位置创建inode
noquota 强制关闭所有文件系统限额功能

mount挂载案例

1.挂载/dev/sdb5到/mnt文件小,然后写入数据
必须注意/dev/sdb5是分区格式化文件系统之后才能使用
[root@localhost ~]# mkfs.xfs /dev/sdb5
[root@localhost ~]# lsblk -f -a |grep sdb5
├─sdb5 xfs                     58fa5f0b-9109-4254-8d0e-229e591486b0 

2.挂载
[root@localhost ~]# mount /dev/sdb5 /mnt
[root@localhost ~]# mount -l |grep /sdb5
/dev/sdb5 on /mnt type xfs (rw,relatime,attr2,inode64,noquota)

3.查看磁盘使用情况
[root@localhost ~]# df  -hT|grep /sdb5
/dev/sdb5      xfs        10G   33M   10G   1% /mnt

4.进入/mnt文件夹写入数据
[root@localhost mnt]# pwd
/mnt
[root@localhost mnt]# du -m ./*
615	./mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz

5.再次查看sdb5使用情况
[root@localhost mnt]# df -hT |grep sdb5
/dev/sdb5      xfs        10G  648M  9.4G   7% /mnt

6.取消挂载后,/mnt下数据消失(注意不能再挂载点下取消挂载,会提示busy)
[root@localhost ~]# umount  /dev/sdb5
[root@localhost ~]# du -m /mnt
0	/mnt

7.以只读的形式挂载设备
[root@localhost ~]# mount -o ro /dev/sdb5 /mnt
#可用查看内容
[root@localhost ~]# ls /mnt/
mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz

#无法写入内容
[root@localhost ~]# touch /mnt/{1.10}.txt
touch: cannot touch ‘/mnt/{1.10}.txt’: Read-only file system

8.禁止挂载的设备执行二进制文件
[root@localhost ~]# umount /mnt
[root@localhost ~]# mount -o noexec /dev/sdb5 /mnt
#添加了noexec参数,无法执行脚本文件,只能再挂载的时候是exec才允许
[root@localhost mnt]# chmod 777 test.sh 
[root@localhost mnt]# ls
mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz  test.sh
[root@localhost mnt]# ./test.sh
-bash: ./test.sh: Permission denied   #给了777权限依然提示权限不足
#重新挂载是可用执行的
[root@localhost mnt]# cd ../
[root@localhost /]# umount /mnt
[root@localhost /]# mount /dev/sdb5 /mnt
[root@localhost /]# /mnt/test.sh 
1
[root@localhost /]# cat /mnt/test.sh 
#!/bin/bash
echo "1"

umount 命令

用于卸载目前挂载在Linux目录中的文件系统

参数:
-f 强制卸载
-l 懒惰的卸载。从文件系统层次分开文件系统,在不繁忙的情况下清理所有对文件系统的引用,场合-f参数共用。

语法:umount  设备|挂载点

案例:
umount /mnt
umount /dev/sdb5

开机自动挂载

/etc/fstab是用来存放文件系统的静态信息的文件,当系统启动时,系统会自动地从这个文件读取信息,并且会自动将此文件中指定的文件系统挂载到指定的目录。

1.通过mount -a 命令,可以读取/etc/fstab文件所有的挂载情况
2.使用vim编辑/etc/fstab,写入如下:
/dev/sdb5 /mnt xfs  defaults 0 0
解析参数如下:
第一列:设备名字,可以是文件系统,也可以是设备名称,或NFS远程网络文件系统
第二列:挂载点,可以是一个已经存在的目录,或者自定义创建一个目录
第三列:Linux能够支持的文件系统类型,如ext3,ext4,nfs,swap...
第四列:挂载的功能选项,默认是defaults,可以通过man mount查看完整的参数。defaults它包含了选项,rw,suid,dev,exec,auto,nouser和async
第五列:dump 表示将整个文件内容备份,一般不对挂载点备份,默认是0,1表示每天备份,2表示隔天备份
第6列:fsck 磁盘检查,默认是0,0不自检,1首要自检,一般只有根分区挂载点为1;2,次级自检。


实践:
1.设置开机自动挂载
[root@localhost ~]# echo -e "/dev/sdb5 /mnt xfs defaults 0 0" >> /etc/fstab
[root@localhost ~]# tail -1 /etc/fstab 
/dev/sdb5 /mnt xfs defaults 0 0

#此时还是未挂载的
[root@localhost ~]# mount -l | grep /dev/sdb5
[root@localhost ~]# 

2.重启后检查挂载情况
reboot
再次检查已经是挂载状态
[root@localhost ~]# mount -l | grep /dev/sdb5
/dev/sdb5 on /mnt type xfs (rw,relatime,attr2,inode64,noquota)

df 命令

显示磁盘相关信息

参数:
-a 包含全部的文件系统
-h 以可读性较高的方式来显示信息
-i 显示inode的信息
-k 指定区块大小为1024字节
-l 仅显示本地端的文件系统
-m 指定区块大小为1048576字节
-t <文件系统类型> 仅显示指定文件系统类型的磁盘信息
-T 显示文件系统的类型
-x <文件系统类型> 不要显示指定文件系统类型的磁盘信息
--help 显示帮助信息
--version 显示版本信

du命令

显示每个文件和目录的磁盘使用空间
也是查看使用空间的,但df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看。

参数:
-a  显示目录中个别文件的大小
-b  显示目录或文件大小时,以byte为单位
-c  显示个别目录或文件的大小外,同时也显示所有目录或文件的总和
-h  以k,m,g为单位,提供信息的可读性
-k  以kb为单位输出
-m 以mb为单位输出
-s 仅显示总计,之列出最后加总的值
--exclude=<目录或文件> 略过指定的目录或文件
--si 类似-h ,但是在计算使用1000为基底而非1024
--help 显示帮助信息并退出
--version 显示版本信息并退出

案例:
[root@localhost ~]# du -h /mnt
0	/mnt

显示总和大小且易读
[root@localhost ~]# du -sh /etc/
31M	/etc

lsof命令

显示Linux系统当前已经打开的所有文件列表 lsof -p pid

参数
-a 列出打开文件存在的进程
-c<进程名> 列出只读进程所打开的文件
-g 列出gid号进程详情
-d<文件号> 列出占用该文件号的进程
+d<目录> 列出目录下被打开的我呢见
+D<目录> 递归累出目录下被打开的文件
-n<目录> 列出使用NFS的文件
-i<条件> 列出符号条件的进程。(4,6 协议,:端口 @ip)
-p <进程号> 列出指定进程号所打开的文件
-u 列出uid进程详情
-h 显示帮助信息
-v 显示版本信息

案例:
查看22端口
[root@localhost /]# lsof -i :22
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd     946 root    3u  IPv4  21196      0t0  TCP *:ssh (LISTEN)
sshd     946 root    4u  IPv6  21198      0t0  TCP *:ssh (LISTEN)
sshd    1405 root    3u  IPv4  23581      0t0  TCP localhost.localdomain:ssh->192.168.178.1:51717 (ESTABLISHED)

[root@localhost /]# lsof -i @192.168.178.3
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1405 root    3u  IPv4  23581      0t0  TCP localhost.localdomain:ssh->192.168.178.1:51717 (ESTABLISHED)

lsof 输出各列信息的含义:
COMMAND 进程名称
PID 进程标识符
PPID 父进程标识符,需要指定-R参数
USER 进程所有者
PGID 进程所属组
FD 文件描述,应用程序通过文件描述符识别该文件

fuser命令

使用文件或文件结构识别进程

案例:
结束正则使用挂载点的进程
fuser -km /mnt

swap交换分区

swap是Linux系统磁盘管理的一块特殊分区每当时间的物理内存不足的时候,操作系统会从整个内存中取出一部分暂时没有使用的内存拿来放到交换分区,从而提高给当前正确使用的程序,可用使用更多的内存。使用swap分区的作用是通过操作系统的调取,程序可用用到的实际内存会远大于物理内存。

sawp分区大小,必须根据物理内存和硬盘容量来计算

  • 当物理内存小于1g必须使用swap提升内存使用量
  • 内存使用过多的应用程序,比如图像,视频等,必须使用swap分区防止物理内存不足,造成软件崩溃
  • 当电脑休眠,内存中的数据会放入swap交换分区中,当电脑恢复后再从swap中读取数据,恢复软件正常工作。

创建swap分区

1.先分区,再指定分区类型。t:修改分区类型,输入16进制编码-82,输入w保存退出
2.格式化(swap使用mkswap格式化)
3.使用swap分区

1.创建swap分区
[root@localhost ~]# fdisk /dev/sdc
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x2b193e60.

Command (m for help): n  #创建分区
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p  #选择主分区
Partition number (1-4, default 1): 1
First sector (2048-41943039, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +500M
Partition 1 of type Linux and of size 500 MiB is set #设置大小500M,

Command (m for help): t #输入t,修改分区类型,改为82表示swap类型
Selected partition 1
Hex code (type L to list all codes): 82
Changed type of partition 'Linux' to 'Linux swap / Solaris'

Command (m for help): p

Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x2b193e60

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048     1026047      512000   82  Linux swap / Solaris

Command (m for help): wq #分区类型已修改,输入w保存退出
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

2.mkswap讲磁盘分区或文件设置为Linux的交换分区
[root@localhost ~]# mkswap /dev/sdc1
Setting up swapspace version 1, size = 511996 KiB
no label, UUID=fdcdb6ec-8963-4220-ba38-27d716c2e662


3.查看swap分区信息
[root@localhost ~]# fdisk  -l| grep /dev/sdc1
/dev/sdc1            2048     1026047      512000   82  Linux swap / Solaris

4.开启交换分区前后对比
[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3773         114        3498          11         160        3440
Swap:          1999           0        1999   
[root@localhost ~]# swapon /dev/sdc1
[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3773         114        3497          11         160        3439
Swap:          2499           0        2499
# 可用看到swap增加了500M

5.关闭swap分区--swapoff命令
[root@localhost ~]# swapoff /dev/sdc1
[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3773         115        3497          11         160        3439
Swap:          1999           0        1999

free命令

显示内存使用情况;可用显示当前系统未使用和已使用的内存数目,还可以显示被内核使用的内存缓冲区

参数:
-b  以byte为单位显示内存使用情况
-k  以kb 为单位显示内存使用情况
-m  以mb为单位显示内存使用情况
-g  以gb为单位显示内存使用情况
-o  不显示缓冲区调节列
-s<间隔秒数>  持续观察内存使用情况
-t  显示内存总和列
-V  显示版本信息

显示内存使用情况
[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3773         114        3498          11         160        3439
Swap:          1999           0        1999
#各项参数解释:
total:内存总数
used:已经使用的内存数
free:空闲的内存数
shared:是指共享的
buffes:是指缓冲内存数
cached page:是指缓存内存数,单位是kb
关系:total=used+free

周期性的查询内存使用情况,每10s执行一次命令
free -s 10

ipcs命令

分析消息队列共享内存和信号量

参数:
-a  显示全部可显示的信息
-q  显示活动的消息队列信息
-m  显示活动的共享内存信息
-s  显示活动的信号量信息

案例:
[root@localhost ~]# ipcs -m  

[root@localhost ~]# ipcs -a

buff和cache

buffers,缓冲,buffers是给写入数据加速的,是为了解决写磁盘的效率
cached,缓存,cached是给读取数据时加速的,是为了解决读磁盘的效率

cached是指把读取出来的数据保存在内存中,再次读取时,不用读取硬盘而直接从内存中读取,加速数据读取过程。
buffers是指写入数据时,把分散的写入操作保存到内存,到达一定程度集中写入硬盘,减少磁盘碎片,以及反复的寻到实际,加速数据写入。

总结buffer和cache
都是基于内存的中间层
cache解决实际文件问题,提高读取速度
buffer解决空间文件,给数据一个暂存空间
cache利用内存提供的告诉读写特性
buffer利用内存提供的存储容量

释放缓存区的内存

1.清理pagecache(页面缓存)
[root@localhost ~]# cat /proc/sys/vm/drop_caches 
0
[root@localhost ~]# echo 1 > /proc/sys/vm/drop_caches
或者 # sysctl -w vm.drop_caches=1

2.清理dentries(目录缓存)和inodes
[root@localhost ~]# echo 2 > /proc/sys/vm/drop_caches 
或者 # sysctl -w vm.drop_caches=2

3.清理pagecache,dentries和inodes
[root@localhost ~]# echo 3 > /proc/sys/vm/drop_caches 
或者 # sysctl -w vm.drop_caches=3

以上三种方式都是临时释放缓存的方法,想要永久释放缓存,需要在/etc/sysctl.conf文件中配置vm.drop_caches=1/2/3,然后sysctl -p生效即可!

另外可以使用sync命令来清理文件系统缓存,还会清理僵尸(zombie)对象和他们占用的内存
sync讲内存缓冲区的数据写入磁盘
[root@localhost ~]# sync

sync命令

用于强制被改名的内容立刻写入磁盘

进程管理 >>

Linux下存在进程(process)和线程(thread)两种操作系统的基本概念。

ps命令

ps命令用于报告当前系统的进程状态。可以搭配kill指令随时中断,删除不必要的程序。ps命令是最基本也是非常强大的进程查看命令,使用该命令可以确定由哪些进程正在运行和运行的状态,进程是否结束,进程有没有僵死,哪些进程占用了过多的资源等。总之大部分信息都是可以通过执行该命令可以得到的。

语法: ps (选项)

常用选项:
-a	显示所有终端机下执行的程序,除了阶段作业领导者外
a	显示现行终端下所有程序,包括其他用户的程序
-A	显示所有程序
-e	列出系统所有运行的进程信息;此选项的效果和指定"A"选项相同;
e	列出程序时,显示每个程序所使用的环境变量
-f	显示UID,PPID,C与STIME栏位
f	用ASCII字符显示树状结构,表达程序间的相互关系
u	以用户为主的格式来显示程序状况
U 	列出属于该用户的程序的状况
x	显示所有程序,不以终端机来区分

实例:
1.查看进程的PID,名称以及CPU 占用率
ps axo pid,comm,pcpu

2.ps不加参数
[root@localhost ~]# ps
   PID TTY          TIME CMD
  1436 pts/0    00:00:01 bash
 10098 pts/0    00:00:00 ps
参数解释:
PID:代表这个进程对应的id号码
CMD:就是正在执行的系统命令行是什么
TTY:进程所属的控制台号码
TIME:进程所使用的CPU的总时间

3.可以通过grep命令来过滤出某一个进程的信息进行管理
ps | grep nginx
#强制杀死进程
kill -9  pid号码

4.ps的组合命令
ps -ef 显示出Linux机器所有详细的进程信息
-e 列出系统所有运行的进程信息
-f 显示 UID PID  PPID  C  STIME  TTY  TIME  CMD
[root@localhost ~]# ps -ef 
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 09:09 ?        00:00:04 /usr/lib/systemd/systemd 
root          2      0  0 09:09 ?        00:00:00 [kthreadd]
...
参数解释:
UUID:这个进程是哪个用户执行的命令
PID:进程的表示号码,用于启动进程
PPID:进程的父进程标识号
C:表示CPU使用的资源百分比
STIME:表示进程开始执行的时间
TTY:该进程再呢个终端上执行的
TIME:该进程使用的CPU总时长
CMD:所下达的指令为何

5.过滤出系统指定的进程信息
ps -ef |grep  vim # 找出vim进程相关的信息

6.ps的命令参数,分为两种系统形式
第一种不带减号的参数:
ps ef 
# e 列出进程信息时,添加每个进程所在的环境变量
# f 以ASCII码字符显示进程间的关系

第二种带减号的参数:
ps -e -f 
-e 的作用是显示出所有进程的信息,
-f 的作用是显示出UID  PPID C  STIME等信息

7.ps查看进程的组合命令
ps aux
[root@localhost ~]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.1 191388  4464 ?        Ss   09:09   0:05 /usr/lib/
...
参数解释:
USER:这个进程属于哪个用户
PID:显示CPU的百分比使用情况
%CPU:显示CPU的百分比使用情况
%MEM:显示内存的百分比使用情况
VSZ:该进程使用的swap内存单位
RSS:表示进程所占用的内存单位
TTY:这个进程所在的终端信息
STAT:表示进程此时的状态
	S 终端睡眠种,可以被唤醒
	s 这个进程含义子进程,就会显示
	R 这个进程运行种
	D 这个进程不可终端睡眠
	T 表示进程已停止
	Z 进程已经是僵尸进程,父进程异常崩溃
	+ 前台进程
	N 低优先级进程
	< 高优先级进程
	L 该进程已经被锁定
	l 多线程进程
TIME:进程运行时间
CMD:进程执行的命令是什么
COMMAND:进程命令


#ps查看进程的量大命令
ps aux |grep  nginx
ps -ef |grep  mysql

#显示指定用户的进程信息
ps -u  #指定查看某个用户的进程

# 显示进程树的信息,以unix的风格,就是携带简化的参数
ps -eH  显示父进程,子进程的目录结构信息

#自定义进程查看的格式
ps -eo pid,args,psr

pstree命令

以树状图的方式展现进程之间的派生关系,显示效果比较直观

参数:
-a	显示每个程序的完整指令,包含路径,参数或是常驻服务的标示
-c  不使用精简标示法
-h	列出树状图时,特别标明限制执行的程序
-p  显示程序识别码
-u  显示用户名称
-v  显示版本信息

案例:
显示当前所有进程的进程号和进程id
pstree -p

显示所有进程的所有详细信息,
pstree -a

可以结合grep使用
pstree -a |grep ssh

pgrep命令

根据用户给出的信息在当前运行进程种查找并列出符合条件的进程ID(PID)

选项:
-o	仅显示找到的最小的(起使)进程
-n	仅显示找到的最大(结束)进程号
-p	指定父进程号
-g	指定进程组
-t	指定开启进程的终端
-u  指定进程的有效用户ID

案例:
1.找出ssh有关的进程号
[root@localhost ~]# pgrep ssh
1005
1434

2.显示指定用户,所有相关的进程号
pgrep -u root

3.过滤进程,以及id
[root@localhost ~]# pgrep -l nginx
10792 nginx
10793 nginx
10794 nginx
10795 nginx
10796 nginx

kill命令

发送相关信号给进程,达到不同的停止效果

参数:
-a	当处理当前进程时,不限制命令名和进程号的对应关系
-p	指定kill 命令只打印相关进程的进程号,而不发生任何新胡
-s	指定发送信号
-u	指定用户
-l  <信号编号>,若不加信号的编号参数,则使用"-l" 参数会列出全部的信号名称

案例:
列出所有信号名称
[root@localhost ~]# kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX	

常用信号解释

信号解释
1挂起,终端掉线或是用户退出
2中断,通常是crtl+c 发出此信号
3退出,通常是ctrl+\发出信号
9立即结束的信号
15终止,通常是系统关机的时候发送
20暂停进程,通常是ctrl+z发出信号
终止进程
kill 默认发送的信号是15,用于终止进程
kill +pid

特殊信号0
kill的信号中,存在有关特殊信号0,使用kill -0 &pid ,代表不发给任何信号给pid,但是会对pid是否存在对应的进程左检查,存在此进程返回0,不存在返回1.
[root@localhost ~]# ps -ef|grep nginx
root      11480      1  0 20:26 ?        00:00:00 nginx: master process nginx
nginx     11481  11480  0 20:26 ?        00:00:00 nginx: worker process
nginx     11482  11480  0 20:26 ?        00:00:00 nginx: worker process
nginx     11483  11480  0 20:26 ?        00:00:00 nginx: worker process
nginx     11484  11480  0 20:26 ?        00:00:00 nginx: worker process
root      11491   1436  0 20:26 pts/0    00:00:00 grep --color=auto nginx
[root@localhost ~]# kill -0 11480
[root@localhost ~]# echo $?
0
[root@localhost ~]# 
[root@localhost ~]# kill -15 11480
[root@localhost ~]# 
[root@localhost ~]# ps -ef |grep nginx
root      11505   1436  0 20:27 pts/0    00:00:00 grep --color=auto nginx
[root@localhost ~]# 
[root@localhost ~]# kill -0 11480 2> /dev/null
[root@localhost ~]# echo $?
1

killall命令

使用进程的名称来杀死一组进程

部分选项:
-e	对长度名称进行进去匹配
-l	忽略大小写的不同
-p	杀死进程所属的进程组
-r	使用正在表达式匹配要杀死的进程名称
-s	用指定的进程号代替默认信号"SIGTERM"
-u	杀死指定用户的进程
-w	等待所有杀的进程死去. killall 会每秒检查一次是否任何被杀的进程仍然存在, 仅当都死光后才返回. 注意: 如果信号被忽略或没有起作用, 或者进程停留在僵尸状态, killall 可能会永久等待.

如:
根据进程名字杀死进程
killall  vim
kill nginx

杀死所有以xxx用户启动的nginx
kill -u xxx nginx

等待进程被全部杀死
[root@localhost ~]# nginx
[root@localhost ~]# ps -ef| grep nginx
root      11581      1  0 20:33 ?        00:00:00 nginx: master process nginx
nginx     11582  11581  0 20:33 ?        00:00:00 nginx: worker process
nginx     11583  11581  0 20:33 ?        00:00:00 nginx: worker process
nginx     11584  11581  0 20:33 ?        00:00:00 nginx: worker process
nginx     11585  11581  0 20:33 ?        00:00:00 nginx: worker process
root      11587   1436  0 20:34 pts/0    00:00:00 grep --color=auto nginx
[root@localhost ~]# killall -w nginx
[root@localhost ~]# echo $?
0

pkill命令

pkill命令可以通过进程名终止指定的进程,对比killall杀死进程可能要执行多次,pkill可以杀死进程以及子进程。

参数:
-t<终端> 指定终端下的所有程序
-u<用户> 指定用户的程序

案例:
指定名称杀进程
pkill nginx

top命令

显示或管理执行中的程序

参数:
-d<时间>	设置间隔时间
-u<用户>	指定用户名
-p<进程号>	指定进程
-n<次数>	循环显示的次数

交换式命令
在top执行过程中,输入以下指令,可以查看不同的结果
z	打开,关闭颜色
Z	全局显示颜色修改,分别对应数字1-7 七种颜色
h	显示帮助画面,给出一些简短的命令总结和说明
k	终止一个进程。[输入pid确认]
i	忽略闲置和僵死进程,这是一个开关式命令
q	退出程序
r	重新安排一个进程的优先级别
S	切换到累计模式
s	改变两次刷新之间的延迟时间(单位为秒),如果有小数,换算成ms,输入0值则系统将不断刷新;默认是5秒
f或者F	从当前显示中添加或删除项目  d删除
o或O	改变显示项目的顺序
l	切换显示平均负载和启动时间信息
m	切换显示内存信息
t	切换显示进程和cpu状态信息
c 	切换显示目录名称和完整命令行
M	根据驻留内存大小进行排序
P	根据CPU使用百分比大小进行排序
T	根据时间/累计时间进行排序
W	将当前设置写入~/.toprc文件中
B	全局字体加粗
数字1	用于多个监控CPU,监控每个连接CPU的情况
b	打开,关闭加粗
x	高亮的形式排序对应的列
<>	移动的选择排序的列

top字段介绍

top - 16:27:50 up 53 days, 59 min,  1 user,  load average: 0.15, 0.05, 0.06
Tasks:  71 total,   1 running,  70 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1882892 total,    72944 free,   179568 used,  1630380 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  1515404 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
    1 root      20   0  125452   3460   2064 S  0.0  0.2  15:00.92 systemd
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.40 kthreadd
...

系统资源解释

前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:


01:06:48                        当前时间
up 1:22                            系统运行时间,格式为时:分
1 user                            当前登录用户数
load average: 0.06, 0.60, 0.48    系统负载,即任务队列的平均长度。

三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。

第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:

Tasks: 29 total        进程总数
1 running            正在运行的进程数
28 sleeping            睡眠的进程数
0 stopped            停止的进程数
0 zombie            僵尸进程数
Cpu(s): 0.3% us        用户空间占用CPU百分比
1.0% sy                内核空间占用CPU百分比
0.0% ni                用户进程空间内改变过优先级的进程占用CPU百分比
98.7% id            空闲CPU百分比
0.0% wa                等待输入输出的CPU时间百分比
0.0% hi     
0.0% si     

最后两行为内存信息。内容如下:

Mem: 191272k total        物理内存总量
173656k used            使用的物理内存总量
17616k free                空闲内存总量
22052k buffers            用作内核缓存的内存量
Swap: 192772k total        交换区总量
0k used                    使用的交换区总量
192772k free            空闲交换区总量
123988k cached            缓冲的交换区总量。

内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,
该数值即为这些内容已存在于内存中的交换区的大小。
相应的内存再次被换出时可不必再对交换区写入。

动态经常字段解释

PID              进程id
PPID              父进程id
RUSER              Real
UID              进程所有者的用户id
USER              进程所有者的用户名
GROUP              进程所有者的组名
TTY              启动进程的终端名。不是从终端启动的进程则显示为
PR              优先级
NI              nice值。负值表示高优先级,正值表示低优先级
P              最后使用的CPU,仅在多CPU环境下有意义
%CPU              上次更新到现在的CPU时间占用百分比
TIME              进程使用的CPU时间总计,单位秒
TIME+              进程使用的CPU时间总计,单位1/100秒
%MEM              进程使用的物理内存百分比
VIRT              进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
SWAP              进程使用的虚拟内存中,被换出的大小,单位kb。
RES              进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
CODE              可执行代码占用的物理内存大小,单位kb
DATA              可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
SHR              共享内存大小,单位kb
nFLT              页面错误次数
nDRT              最后一次写入到现在,被修改过的页面数。
S              进程状态。
-              D=不可中断的睡眠状态
-              R=运行
-              S=睡眠
-              T=跟踪/停止
-              Z=僵尸进程
COMMAND              命令名/命令行
WCHAN              若该进程在睡眠,则显示睡眠中的系统函数名
Flags              任务标志,参考

nohup命令

将程序以忽略挂起信号的方式运行起来,被运行的程序的输出信息将不会显示到终端。无论是否将nouhup命令的输出重定向到终端,输出都将写入到目录的nohup.out文件,如果当前目录的nohup.out文件不可写入,则输出到$HOME/nohup.out文件中

案例:
1.直接加上要执行的命令,技术终端关闭,程序也会在后台继续运行
[root@localhost ~]# nohup ping -c 10 baidu.com
nohup: ignoring input and appending output to ‘nohup.out’


2.nohup加上执行的命令 &
# 加是&符合,直接关闭窗口后可以继续运行命令行
[root@localhost ~]# nohup ping -c 10 baidu.com &
[2] 12989
[1]   Done                    nohup ping -c 10 baidu.com
[root@localhost ~]# nohup: ignoring input and appending output to ‘nohup.out’

[root@localhost ~]# 

bg命令

将程序放入后台运行,使得前台可以运行其他的命令,等同于在指令后面添加符合&,都是将其放入系统后台运行。

如果不需要输出信息,可以重定向到文件或Linux黑洞。

fg命令

将后台作业移动到前台终端运行

jobs命令

显示作业的状态

-l  在作业信息中额外的列出PID
-n	只列出最近一次通知以来状态变更的作业
-p	只列出PID
-r	只输出处于运行状态的作业
-s	只输出处于停止状态的作业

案例:
[root@localhost ~]# ping baidu.com
^C
[root@localhost ~]# ping baidu.com
PING baidu.com (220.181.38.148) 56(84) bytes of data.
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=1 ttl=128 time=40.0 ms
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=2 ttl=128 time=43.7 ms
^Z
[1]+  Stopped                 ping baidu.com
[root@localhost ~]# jobs
[1]+  Stopped                 ping baidu.com
# 可以配合bg,fg使用

runlevel

打印当前Linux系统的运行等级

[root@localhost ~]# runlevel 
N 3

0	停机
1	单用户模式
2	多用户,没有NFS
3	完全多用户模式
4	用户自定义
5	图像界面多用户模式
6	重启
S s Single user mode

init命令

init进程是所有Linux进程的父进程

init命令 是Linux下的进程初始化工具,init进程是所有Linux进程的父进程,它的进程号为1。init命令是Linux操作系统中不可缺少的程序之一,init进程是Linux内核引导运行的,是系统中的第一个进程。

-b	不执行相关脚本而直接进入单用户模式
-s	切换到单用户模式

init 0代表直接关机
init 6 代表重启

service命令

centos7已经用systemctl替代

htop命令

一个互动的进程查看器,可以动态观察系统进程状况

安装:yum install htop  -y
各项指标和相似

1.输入htop,进入htop界面
2.按f2或者点击setup,进入设置界面
3.可以使用上下左右进行状态栏选择,以及空格切换风格
4.输入f3,进行进程查找
5.查找到某个进程后,如果需要杀死,可以按f9,且输入enter回车,给进程发送终止信号
6.f5,显示进程的层级关系,父进程,子进程的目录结构信息
7.支持一些快捷键:
M以内存使用量大小排序
P以CPU使用量排序
T以进程运行的时间排序
/进行搜索输入,查找指定的进程
K隐藏内核线程
H隐藏用户进程
#快速定位光标到PID所指定的进程上
f5显示进程树
f10保存
htop能够记忆用户的设置
q退出

glances命令

glances是一个由python编写,使用psutil库来从系统抓信息的基于curses(多视窗处理方式)开发的跨平台命令行系统监视工具。

glances可以为unix和Linux性能专家提供监视和分析性能数据的功能,其中包括:
CPU使用率
内存使用情况
内核统计信息和运行队列信息
磁盘I/O速度,传输和读/写比率
文件系统中的可用空间
磁盘适配器
网络I/O速度,传输和读/写比率
页面空间和页面速度
消耗资源最多的进程
计算机信息和系统资源

glances还能将采集到的数据,输出到一个文件中,便于数据分析人员,对服务器性能报表进行分析以及绘制图表等。

1.下载安装此工具
可用使用python的软件包管理工具pip
pip install glances

2.或者yum安装
yum install glances -y

3.glances的web服务功能
此功能能够将glances监控到的数据,以网站形式做一个展示,使用浏览器去查看
# yum install python python-pip python-devel gcc -y
再用python的包管理工具,安装一个模块,启动web服务
# pip install bottle

4.使用glances运行一个web监控界面
[root@localhost ~]# glances -w
Glances web server started on http://0.0.0.0:61208/


# 来此同一给机器的ip地址
127.0.0.1 本地回环地址,用于机器硬件直接的ip通道,只能用于内部访问
# 0.0.0.0表示绑定服务器到这台机器的所有网卡上
http://0.0.0.0:61208/

对外提供访问服务的ip通信,由网卡提供服务,访问本机+61208端口
http://192.168.178.3:61208/
界面如下:

image-20210217104919697

glances-CS模式

glances还支持cs模式,glances运行一个server服务器,可用用clent客户端去远程连接访问,查看系统状况。

1.在服务端运行如下命令
[root@localhost ~]# glances -s -B 0.0.0.0
Glances server is running on 0.0.0.0:61209

2.在客户端机器上连接服务端
glances -c 服务器的ip地址
glances界面
参数:
-b	显示网络连接速度 byte/秒
-B	@IP|host:绑定服务器IP地址或主机名称
-c	@IP|host:连接glances服务器端
-C	file:设置配置文件,默认是/etc/glances/glances.conf
-d	关闭磁盘I/O模块
-e	显示传感器温度
-f	file:设置输出文件(格式是HTML或者CSV)
-m	关闭挂载的磁盘模块
-n	关闭网络模块
-p	port 设置允许端口,默认是61209
-P	password:设置客户端/服务器密码
-s	设置glances 运行模式为服务器
-t	sec:设置屏幕刷新的时间间隔,单位为秒,默认值为2秒,数值许可范围1-32767
-h 显示帮助
-v 显示版本信息

image-20210217135617010

进程字段信息
VIRT:虚拟内存大小
RES:进程占用的无论内存
%CPU:该进程占用的CPU使用率
%MEN:该进程占用用的物理内存和总内存的百分比
PID:进程ID号
USER:该进程启动后占用的总的CPU时间
IO_R和IO_w:进程的读写I/O速率
NAME:进程名称
NI:进程优先级
S:进程状态,其中S表示休眠,R表示正在运行,Z表示僵死状态
IOR/S 磁盘读取
IOW/S 磁盘写入
glances交互式命令
h	显示帮助信息
q	t退出
c	以CPU排序
m	以内存排序
i	以io速率排序
p	以进程名排序
d	打开,关闭磁盘读写情况
f	打开关闭文件系统剩余空间情况
w	删除日志文件
l	显示日志
s	显示传感器信息
l	伦理显示每个CPU内核的使用情况(次选项仅仅使用再多核CPU系统)

lscpu

右进行状态栏选择,以及空格切换风格
4.输入f3,进行进程查找
5.查找到某个进程后,如果需要杀死,可以按f9,且输入enter回车,给进程发送终止信号
6.f5,显示进程的层级关系,父进程,子进程的目录结构信息
7.支持一些快捷键:
M以内存使用量大小排序
P以CPU使用量排序
T以进程运行的时间排序
/进行搜索输入,查找指定的进程
K隐藏内核线程
H隐藏用户进程
#快速定位光标到PID所指定的进程上
f5显示进程树
f10保存
htop能够记忆用户的设置
q退出


### glances命令

glances是一个由python编写,使用psutil库来从系统抓信息的基于curses(多视窗处理方式)开发的跨平台命令行系统监视工具。

glances可以为unix和Linux性能专家提供监视和分析性能数据的功能,其中包括:
CPU使用率
内存使用情况
内核统计信息和运行队列信息
磁盘I/O速度,传输和读/写比率
文件系统中的可用空间
磁盘适配器
网络I/O速度,传输和读/写比率
页面空间和页面速度
消耗资源最多的进程
计算机信息和系统资源

glances还能将采集到的数据,输出到一个文件中,便于数据分析人员,对服务器性能报表进行分析以及绘制图表等。

1.下载安装此工具
可用使用python的软件包管理工具pip
pip install glances

2.或者yum安装
yum install glances -y

3.glances的web服务功能
此功能能够将glances监控到的数据,以网站形式做一个展示,使用浏览器去查看

yum install python python-pip python-devel gcc -y

再用python的包管理工具,安装一个模块,启动web服务

pip install bottle

4.使用glances运行一个web监控界面
[root@localhost ~]# glances -w
Glances web server started on http://0.0.0.0:61208/

来此同一给机器的ip地址

127.0.0.1 本地回环地址,用于机器硬件直接的ip通道,只能用于内部访问

0.0.0.0表示绑定服务器到这台机器的所有网卡上

http://0.0.0.0:61208/

对外提供访问服务的ip通信,由网卡提供服务,访问本机+61208端口
http://192.168.178.3:61208/
界面如下:


[外链图片转存中...(img-5a75fKPa-1613542156382)]

#### glances-CS模式

glances还支持cs模式,glances运行一个server服务器,可用用clent客户端去远程连接访问,查看系统状况。

1.在服务端运行如下命令
[root@localhost ~]# glances -s -B 0.0.0.0
Glances server is running on 0.0.0.0:61209

2.在客户端机器上连接服务端
glances -c 服务器的ip地址


#### glances界面

参数:
-b 显示网络连接速度 byte/秒
-B @IP|host:绑定服务器IP地址或主机名称
-c @IP|host:连接glances服务器端
-C file:设置配置文件,默认是/etc/glances/glances.conf
-d 关闭磁盘I/O模块
-e 显示传感器温度
-f file:设置输出文件(格式是HTML或者CSV)
-m 关闭挂载的磁盘模块
-n 关闭网络模块
-p port 设置允许端口,默认是61209
-P password:设置客户端/服务器密码
-s 设置glances 运行模式为服务器
-t sec:设置屏幕刷新的时间间隔,单位为秒,默认值为2秒,数值许可范围1-32767
-h 显示帮助
-v 显示版本信息


[外链图片转存中...(img-s9i1v0XM-1613542156383)]

#### 进程字段信息

VIRT:虚拟内存大小
RES:进程占用的无论内存
%CPU:该进程占用的CPU使用率
%MEN:该进程占用用的物理内存和总内存的百分比
PID:进程ID号
USER:该进程启动后占用的总的CPU时间
IO_R和IO_w:进程的读写I/O速率
NAME:进程名称
NI:进程优先级
S:进程状态,其中S表示休眠,R表示正在运行,Z表示僵死状态
IOR/S 磁盘读取
IOW/S 磁盘写入


#### glances交互式命令

h 显示帮助信息
q t退出
c 以CPU排序
m 以内存排序
i 以io速率排序
p 以进程名排序
d 打开,关闭磁盘读写情况
f 打开关闭文件系统剩余空间情况
w 删除日志文件
l 显示日志
s 显示传感器信息
l 伦理显示每个CPU内核的使用情况(次选项仅仅使用再多核CPU系统)


### lscpu

显示有关CPU架构的信息
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值