Linux基础

1.分析磁盘使用率

df

输出结果列说明:

参数释义
Filesystem代表该文件系统是哪个分区,所以列出的是设备名称
1K-blocks磁盘大小。说明下面的数字单位是1KB,可利用-h或-m来改变单位大小,也可以用-B来设置
Used已经使用的空间大小
Available剩余的空间大小
Use%磁盘使用率
Mounted on磁盘挂载的目录

选项与参数:

选项释义
-a列出所有的文件系统,包括系统特有的 /proc 等文件系统;
-k以 KBytes 的容量显示各文件系统;
-m以 MBytes 的容量显示各文件系统;
-h以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
-H以 M=1000K 取代 M=1024K 的进位方式;
-T显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
-i不用硬盘容量,而以 inode 的数量来显示;

2.分析网络带宽使用率

nload:实时统计网卡带宽使用率

nload

没有nload命令的需要下载;

nload 属于 EPEL 仓库中的包,你只需要先安装 EPEL 源:

yum install -y epel-release
yum makecache

然后再安装 nload

yum -y install nload

使用命令查看

nload ens33  #指定网卡进入

输出结果列说明:

参数释义
Incoming进入网卡的流量
Outgoing从这块网卡出去的流量
Curr当前流量
Avg平均流量
Min最小流量
Max最大流量
Ttl总流量

3.分析磁盘IO使用率

iostat

安装iostat命令

yum -y install sysstat

输出结果列说明:

参数释义
%user表示用户空间进程使用 CPU 时间的百分比
%nice表示用户空间进程以降低优先级的方式使用 CPU 时间的百分比
%system表示内核进程使用 CPU 时间的百分比
%iowait表示 CPU 等待未完成的 I/O 请求所占用的时间百分比
%steal表示虚拟化环境中,其他虚拟机运行时占用 CPU 时间的百分比
$idle表示 CPU 空闲时间的百分比
tps表示每秒传输的 I/O 请求数量,即 I/O 操作数
kB_read/s表示每秒读取的数据量,单位为 KB
kB_wrtn/s表示每秒写入的数据量,单位为 KB
kB_read表示自系统启动以来读取的总数据量,单位为 KB
kB_wrtn表示自系统启动以来写入的总数据量,单位为 KB

使用-x选项可以看到更详细的信息

4.分析CPU使用率

top

输出结果列说明:

参数释义
第一行(top)
22:45:02系统当前时刻
1:53系统启动后到现在的运作时间
3 users当前登录到系统的用户,更确切的说是登录到用户的终端数 — 同一个用户同一时间对系统多个终端的连接将被视为多个用户连接到系统,这里的用户数也将表现为终端的数目
load average当前系统负载的平均值
第二行(Tasks)
208 total当前系统进程总数
1 running当前运行中的进程数
297 sleeping当前处于等待状态中的进程数
0 stoped被停止的系统进程数
0 zombie被复原的进程数
第三行(Cpus)分别表示了 CPU 当前的使用率
第四行(Mem)分别表示了内存总量、当前使用量、空闲内存量、以及缓冲使用中的内存量
第五行(Swap)表示类别同第四行(Mem),但此处反映着交换分区(Swap)的使用情况。通常,交换分区(Swap)被频繁使用的情况,将被视作物理内存不足而造成的。
中间部分的内部命令提示栏top 运行中可以通过 top 的内部命令对进程的显示方式进行控制
s改变画面更新频率
l关闭或开启第一部分第一行 top 信息的表示
t关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示
m关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示
N以 PID 的大小的顺序排列表示进程列表
P以 CPU 占用率大小的顺序排列进程列表
M以内存占用率大小的顺序排列进程列表
h显示帮助
n设置在进程列表所显示进程的数量
q退出 top
最下部分的进程列表栏
PID进程 ID
USER启动该进程的用户
PR优先级(Priority),数值越小表示优先级越高
NINice 值(影响调度优先级,负数表示高优先级)
VIRT虚拟内存大小(包括进程使用的所有内存和交换空间)
RES常驻内存(实际使用的物理内存,单位KB)
SHR共享内存(与其他进程共享的内存部分)
S进程状态:S:睡眠、R:运行、Z:僵尸、T:停止
%CPU当前进程使用的 CPU 百分比
%MEM当前进程使用的物理内存占比
TIME+进程使用的总 CPU 时间(格式为 分:秒.百分秒)
COMMAND启动该进程的命令或可执行文件名

5.磁盘分区:添加一块5G硬盘并给/mnt/test扩容

lsblk  #显示系统中所有块设备

1.当前共有30G,接下来添加一块5G的硬盘

2.重启后使用lsblk查看磁盘

3.对新增加的硬盘进行分区,使用fdisk命令创建和维护分区表。

fdisk /dev/sdb

选项与参数:

选项释义
p查看已分区数量
n(new partition)新增加一个分区
p(parimary partition)分区类型选择为主分区
回车默认(起始扇区)
回车默认(结束扇区)
t(change partition id)修改分区类型
w将以上改动写入分区表
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0xef79b0ee 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):p

磁盘 /dev/sdb:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xef79b0ee

  设备 Boot     Start         End     Blocks   Id System

命令(输入 m 获取帮助):n
Partition type:
  p   primary (0 primary, 0 extended, 4 free)
  e   extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-10485759,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-10485759,默认为 10485759):
将使用默认值 10485759
分区 1 已设置为 Linux 类型,大小设为 5 GiB

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# lsblk
NAME           MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda               8:0   0   30G 0 disk
├─sda1           8:1   0   1G 0 part /boot
└─sda2           8:2   0   29G 0 part
├─centos-root 253:0   0   27G 0 lvm /
└─centos-swap 253:1   0   2G 0 lvm [SWAP]
sdb               8:16   0   5G 0 disk
└─sdb1           8:17   0   5G 0 part
sr0             11:0   1 8.8G 0 rom  

4.对新增加的硬盘格式化

mkfs.ext3 /dev/sdb1
[root@localhost ~]# mkfs.ext3 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
327680 inodes, 1310464 blocks
65523 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=1342177280
40 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

5.创建挂载目录test

mkdir /mnt/test

6.查看分区 UUID并持久化挂载

[root@localhost ~]# blkid /dev/sdb1
/dev/sdb1: UUID="9ff0e857-6c82-48ae-a499-2e6003e55440" SEC_TYPE="ext2" TYPE="ext3"
[root@localhost ~]# vim /etc/fstab
在最后添加一行:
UUID=9ff0e857-6c82-48ae-a499-2e6003e55440 /mnt/test ext3 defaults 0 0
[root@localhost ~]# mount -a

7.检查磁盘挂载情况

[root@localhost ~]# lsblk
NAME           MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda               8:0   0   30G 0 disk
├─sda1           8:1   0   1G 0 part /boot
└─sda2           8:2   0   29G 0 part
├─centos-root 253:0   0   27G 0 lvm /
└─centos-swap 253:1   0   2G 0 lvm [SWAP]
sdb               8:16   0   5G 0 disk
└─sdb1           8:17   0   5G 0 part /mnt/test
sr0             11:0   1 8.8G 0 rom  
[root@localhost ~]# df -h
文件系统                 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root   27G 4.2G   23G   16% /
devtmpfs                 895M     0 895M   0% /dev
tmpfs                   911M     0 911M   0% /dev/shm
tmpfs                   911M   11M 901M   2% /run
tmpfs                   911M     0 911M   0% /sys/fs/cgroup
/dev/sda1               1014M 170M 845M   17% /boot
tmpfs                   183M 8.0K 183M   1% /run/user/42
tmpfs                   183M     0 183M   0% /run/user/0
/dev/sdb1               4.8G   11M 4.6G   1% /mnt/test

6.如何查看系统版本,内核版本

[root@localhost ~]# cat /etc/centos-    #查看系统版本
CentOS Linux release 7.5.1804 (Core)
[root@localhost ~]# uname -a     #查看内核版本
Linux localhost.localdomain 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

7.如何查看文本、日志?使用多种方法,并记录区别

1.cat:一次性全部输出

[root@localhost ~]# cat /var/log/messages

✅ 优点:简单,直接输出完整内容。

❌ 缺点:文件大时加载慢,不能翻页。

2.more:分页查看(向下翻页)

[root@localhost ~]# more /var/log/messages

✅ 优点:可以一页页看,适合大文件。

❌ 缺点:只能向下翻页(空格),不能向上。

3.less:分页查看(可上下翻页)

[root@localhost ~]# less /var/log/messages

✅ 优点:

  • 可上下翻页(方向键或 PageUp/PageDown)。
  • 可搜索:输入 /关键字,按 n 查找下一个。
  • 不需要一次性加载整个文件。

❌ 缺点:稍微复杂一点(但功能强大)。

4.tail:查看文件末尾部分

[root@localhost ~]# tail /var/log/messages

默认显示最后 10 行日志。

常用于观察最近的日志信息。

可以加参数查看更多行:

[root@localhost ~]# tail -n 50 /var/log/messages

5.tail -f:实时跟踪文件更新(日志调试必备)

[root@localhost ~]# tail -f /var/log/messages

✅ 优点:可以边运行程序边实时观察日志更新。

Ctrl+C 退出。

6.head:查看文件前几行

[root@localhost ~]# head /var/log/messages

默认显示前 10 行。

可加参数:

[root@localhost ~]# head -n 30 /var/log/messages

7.grep:按关键字搜索内容

[root@localhost ~]# grep error /var/log/messages

只显示含有关键词的行(比如错误信息)。

可以配合 tailless 联合使用:

[root@localhost ~]# grep sshd /var/log/secure | less

8.journalctl:CentOS 7 默认的 systemd 日志查看工具

[root@localhost ~]# journalctl

可查看系统服务日志(如 systemddockersshd)。

示例:

journalctl -u sshd        # 查看 sshd 服务日志
journalctl -xe           # 查看最近的错误
journalctl -f             # 类似 tail -f 实时查看

✅ 总结对比表:

命令分页实时更新搜索常用场景
cat快速查看小文件
more向下翻页查看大文件
less查看大文件/支持搜索与翻页 ✅
tail可加 -f查看日志末尾/最新信息 ✅
head查看文件开头
grep按关键字过滤搜索 ✅
journalctl可加 -f查看系统服务日志(systemd)✅

8.如何终止一个进程?如何把一个进程放到后台运行?

一、终止进程的方法

1.使用 kill 命令 + 进程 PID

kill <PID>

PID 是进程 ID。

通常发送 SIGTERM(终止信号)。

2. 强制终止进程(SIGKILL

kill -9 <PID>

用于无法正常终止的进程。

比较“粗暴”,不推荐优先使用。

3. 使用 pkill 根据进程名称终止

pkill firefox

会终止所有名为 firefox 的进程。

4. 使用 tophtop 中交互式终止

top

找到进程 PID,按 k,输入 PID,回车确认。

二、将进程放到后台运行的方法

1. 启动时就放到后台运行:加 &

./script.sh &

或:

python3 myscript.py &

命令结尾加 &,直接放到后台运行。

会返回一个后台任务编号(如 [1] 1234,其中 1234 是 PID)。

2. 已经在前台运行,临时放后台

步骤:

  1. Ctrl + Z 暂停(挂起)当前任务。
  2. 然后输入:
bg
  • 表示让挂起的任务继续在后台运行。

🔍 查看后台进程

jobs

查看当前 shell 启动的后台任务及编号。

📥 将后台进程重新拉回前台

fg %1

%1 表示任务编号(不是 PID)。

可以通过 jobs 查到编号。

📌 补充:后台进程保持运行(关闭终端不退出)

默认情况下,后台进程在你退出终端时会被杀掉。可使用:

方法一:nohup

nohup ./script.sh > output.log 2>&1 &
  • nohup:忽略挂断信号(保持进程在你登出后继续运行)。
  • 输出重定向到 output.log

方法二:使用 screentmux

yum install -y screen
screen

创建一个虚拟终端,可以断开后再连接回来,非常适合跑长时间的任务。

✅ 总结速查表:

操作命令
终止指定 PIDkill PID
强制终止kill -9 PID
按名称终止pkill 进程名
启动时后台运行命令 &
暂停并放到后台Ctrl+Zbg
查看后台任务jobs
拉回前台运行fg %编号
保持后台运行不断开nohup 命令 & 或使用 screen

9.如何给一个文件和目录进行压缩,解压?

1. 使用 tar 打包压缩为 .tar.gz(最常见)

tar -czvf archive.tar.gz 文件或目录
  • -c:创建压缩包
  • -z:使用 gzip 压缩
  • -v:显示详细过程(可省略)
  • -f:指定文件名

✅ 示例:

tar -czvf mydir.tar.gz mydir/

2. 解压 .tar.gz 文件

tar -xzvf archive.tar.gz

3. 使用 zip 压缩为 .zip

zip -r archive.zip 文件或目录

✅ 示例:

zip -r myfile.zip mydir/

4. 解压 .zip 文件

unzip archive.zip

5. 使用 tar.bz2 格式(更高压缩率)

tar -cjvf archive.tar.bz2 文件或目录
tar -xjvf archive.tar.bz2       # 解压

6. 使用 tar.xz 格式(压缩率高,但慢)

tar -cJvf archive.tar.xz 文件或目录
tar -xJvf archive.tar.xz       # 解压

7. 使用 gzip 仅压缩单个文件(不会保留原文件)

gzip 文件名
gunzip 文件名.gz               # 解压

10.查看/etc/passwd文件中包含“user”的行 (使用grep)

[root@localhost ~]# grep 'user' /etc/passwd
saslauth:x:994:76:Saslauthd user:/run/saslauthd:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin

11.查看/etc/passwd文件中包含“ROOT”的行,不区分大小写(使用grep)

[root@localhost ~]# grep -i "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

✅ 含义解释:

  • -i:表示忽略大小写(ignore case);
  • "ROOT":要查找的字符串,不区分大小写,所以会匹配 rootRootROOT 等;
  • /etc/passwd:要搜索的目标文件,保存了系统中所有用户的信息。

12.查看/etc/passwd文件中不包含“user”的行 (使用grep)

[root@localhost ~]# grep -v "user" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sssd:x:998:996:User for sssd:/:/sbin/nologin
libstoragemgmt:x:997:994:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
colord:x:996:993:User for colord:/var/lib/colord:/sbin/nologin
gluster:x:995:992:GlusterFS daemons:/var/run/gluster:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
setroubleshoot:x:993:990::/var/lib/setroubleshoot:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
chrony:x:992:987::/var/lib/chrony:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
unbound:x:991:986:Unbound DNS resolver:/etc/unbound:/sbin/nologin
geoclue:x:990:984:User for geoclue:/var/lib/geoclue:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x:989:983::/run/gnome-initial-setup/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
a:x:1000:1000:a:/home/a:/bin/bash

✅ 含义解释:

  • -v:反向匹配,显示不包含匹配字符串的行
  • "user":要排除的字符串;
  • /etc/passwd:要搜索的文件。

13.统计/etc/passwd的行数

[root@localhost ~]# wc -l < /etc/passwd
43

✅ 含义解释:

  • < /etc/passwd 表示将文件内容通过标准输入传递给 wc
  • 这样 wc 就不会显示文件名,只输出纯数字行数

14.统计/etc/passwd中包含root的行数

[root@localhost ~]#  grep 'root' /etc/passwd | wc -l
2

grep 'root' /etc/passwd 找出所有包含 root 的行;

wc -l 统计这些行的数量。

15.统计/etc/passwd中包含root的所在行数

[root@localhost ~]# grep -n "root" /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin

-n 显示匹配行的行号

16.使用sed在每一行前面加上1(创建测试文件,for循环写入5行测试数据)

[root@localhost ~]# touch test.txt
[root@localhost ~]# for i in {1..5};do
> echo "This is line $i" >> test.txt
> done
[root@localhost ~]# cat test.txt
This is line 1
This is line 2
This is line 3
This is line 4
This is line 5
[root@localhost ~]# sed 's/^/1/' test.txt
1This is line 1
1This is line 2
1This is line 3
1This is line 4
1This is line 5

s/^/1/:表示替换每行开头(^)为空字符串之前,加上字符 1

修改原文件,用 -i 选项:

sed -i 's/^/1/' test.txt

这会直接在 testfile.txt 中插入 1 到每行开头。

17.使用sed在每一行后面加上2(创建测试文件,for循环写入5行测试数据)

[root@localhost ~]# touch test2.txt
[root@localhost ~]# for i in {1..5};do
> echo "This is line $i" >> test2.txt
> done
[root@localhost ~]# cat test2.txt
This is line 1
This is line 2
This is line 3
This is line 4
This is line 5
[root@localhost ~]# sed 's/$/2/' test2.txt
This is line 12
This is line 22
This is line 32
This is line 42
This is line 52

s/$/2/ 表示在每行的行尾$)后添加字符 2

修改原文件,用 -i选项:

sed -i 's/$/2/' test2.txt

18.如何输出一个文件的前3行?

[root@localhost ~]# head -n 3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
  • head 是 Linux 中用来查看文件开头部分内容的命令;
  • -n 3 表示只显示前三行
  • /etc/passwd 是你要查看的文件,里面保存了系统用户的账户信息。

19.如何输出一个文件的后3行?

[root@localhost ~]# tail -n 3 /etc/passwd
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
a:x:1000:1000:a:/home/a:/bin/bash
  • tail 是 Linux 中用来查看文件结尾部分内容的命令;
  • -n 3 表示只显示前三行
  • /etc/passwd 是你要查看的文件,里面保存了系统用户的账户信息。

20.写一个定时任务(每3分钟执行一次,输入123追加到一个文件中)

  1. 编辑当前用户的定时任务配置:
crontab -e
  1. 在打开的编辑器中添加下面这一行:
*/3 * * * * echo 123 >> /root/test3.txt
  • */3 表示每3分钟执行一次;
  • echo 123 >> /root/test3.txt 表示把 123 追加写入指定文件。

查看当前定时任务:

[root@localhost ~]# crontab -l
*/3 * * * * echo 123 >> /root/test3.txt

30分钟后查看test3.txt文件

[root@localhost ~]# cat test3.txt 
123
123
123
123
123
123
123
123
123
123