2023.5.9核心命令讲解实战
Posted BXXY5961
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2023.5.9核心命令讲解实战相关的知识,希望对你有一定的参考价值。
1.帮助命令
man
man [章节] 命令
man ls
man 5 passwd
help info
2.文件和目录操作命令
ls
ls -l #显示文件详细信息
ls -a #显示全部文件,包括隐藏文件
cd
cd - #切换到上次操作所目录
cd .. #切换到上级目录
cd ~ #切换到用户家目录
mkdir
mkdir -p /dir/file #递归创建目录
cp
cp -r /dir /tmp #递归拷贝
cp test,.bak
mv
mv 1.txt /tmp #移动
mv 1.txt 1.yaml #重命名
rm
rm file
rm -rf #递归,强制删除
touch
touch file #文件存在会更新时间戳
basename dirname
basename 只显示文件、目录名
dirname 显示文件/目录前面的路径
chattr lsattr
chattr +i 1.txt #禁止删除,只能增加内容
lsattr #查看文件的第二扩展文件系统属性
md5sum
md5sum file #生成md5值
md5sum test.txt >test.md5
md5sum -c test.md5
test.txt: OK
3.查看文件及内容处理命令
vim vi
三种模式:一般模式、插入模式、命令行模式
a,bs/text/text2/g #a,b行进行查找替换,没用ab默认当前行匹配,g表示整行匹配到的都替换
a,i,o,O,I,A,C #都会进入编辑
dd,yy,p,P #删除,复制,粘贴
gg,G,0 #首行,最后一行,光标到行首
ZZ #wq
:$ #跳到最后一行行首
v #可视化
ctrl+v #可视化块
cat 查看文件内容
cat test.txt
nginx1 test4
nginx2 test5
nginx3 test6
cat ##test.txt <<EOF #格式这样,EOF可换
## 123
## EOF
cat test.txt
123
more less
less 可以pagdown pagup 分页多次
more 分页一次性
tail head
默认都是显示10行
head -n +N 显示前N行
head -n -N 去掉末尾N行
tail -n -N 显示后N行
tail -n +N 第N行到尾行
tail -f *.log 实时追踪文件变化,当文件被删除或改名终止
tail -F *.log 当文件被删除,改名后创建相同名字的文件,并进行追踪
cut 提取字段、字符
cut OPTION... [FILE]...
-d #指定分隔符
-f #指定列、字段
-c #提取字符
cut -d : -f1,3 /etc/passwd
root:0
bin:1
cut -c 1-4 /etc/passwd
root
bin:
uniq 去重
uniq去重只去除连续重复的行,通常和sort配合使用
-c #统计重复次数
sort 排序
sort [OPTION]... [FILE]...
-n #按照数字大小排序
-r #反向排序,默认升序
-f #忽略大小写
-u #输出结果删除重复的行
-k X #按照分隔符排序第X字段
-t #指定分隔符
sort -nr test.txt |uniq -c
wc 统计
wc -l 统计行数
-c 统计字节
-w 统计单词
tr 字符操作
-d 删除匹配的字符
echo "HELLO WORLD" | tr \'A-Z\' \'a-z\'
hello world
echo "hello 123 world 456" | tr -d \'0-9\'
hello world
vimdiff dos2unix
vimdiff diff 比较稳健差别,vimdiff可视化
dos2unix 将DOS格式文本文件转换成Unix格式
dos2unix file
4.文件压缩、解压缩
tar
tar [OPTION]... [FILE]...
-C #解压到指定目录
-c #创建tar包
-x #解压
-f #指定文件名称
-t #查看里面的内容
-z #gzip压缩
-j #bz2压缩
-J #xz压缩
tar zcvf /root/etc.tar.gz /etc
gzip zip unzip
gzip
-d #解压缩
-l #列出压缩文件的信息
-r #压缩一个tar备份文件,压缩文件的扩展名为.tar.gz
-N #压缩保留文件时间戳
-c #保留原始文件
gzip -c aa > aa.gz
gzip -r log.tar
zip
-r #递归压缩
-q #不显示过程
-x #排除指定目录
zip -q -r html.zip *
zip -r basic.zip example/basic/ -x "example/basic/node_modules/*" -x "example/basic/build/*" -x "example/basic/coverage/*"
zip -r httpdocs.zip httpdocs --exclude *.svn* --exclude *.git*
unzip
-n #解压不覆盖原有文件
-d #指定目录
-o #不询问覆盖原有文件
unzip -n test.zip -d /tmp
unzip -o test.zip -d tmp/
5.信息显示命令
uname
uname -a #查看主机相关信息、内核版本
Linux master 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
hostname查看主机名
hostname -I 查看主机ip
uptime w
#查看负载 1分钟 5分钟 15 分钟,负载状态和CPU核数相关
3为良好,多核则3*核数
w
19:53:18 up 1 day, 4:54, 2 users, load average: 0.14, 0.07, 0.12
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 07Dec22 6days 4.33s 4.33s -bash
root pts/0 11.0.1.1 15:07 6.00s 0.41s 0.41s -bash
stat 查看文件状态信息
stat test.txt
File: ‘test.txt’
Size: 296 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 2680022 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2023-05-07 18:05:02.703408797 +0800
Modify: 2023-05-07 18:05:00.763416490 +0800
Change: 2023-05-07 18:05:00.763416490 +0800
Birth: -
top 查看系统中进行的程序
-d #指定刷新间隔,或者用s进入交互模式
-p #根据pid监控进程
交互命令:
1 #监控逻辑CPU状态
c #切换命令名称和完成命令
M #按照内存排序
P #按照CPU百分比由大到小排序
T #根据时间排序
f #选择显示的内容
free 查看内存和swap
free -m
total used free shared buff/cache available
Mem: 3932 1077 232 39 2622 2392
Swap: 0 0 0
date
date -s "20120523 01:01:01" # 这样可以设置全部时间
date +"%F %T"
dmesg 显示系统启动过程信息
6.搜索命令文件位置
which
查找并显示给定命令的绝对路径
根据PATH变量遍历查找命令所在位置
which find
/usr/bin/find
whereis
查找二进制程序、代码等相关文件的路径
whereis docker
docker: /usr/bin/docker /etc/docker /usr/libexec/docker /usr/share/man/man1/docker.1.gz
locate
基于本地数据库查询updatedb
更新数据库,模糊匹配
locate file
-i 忽略大小写
-n 显示前n行
7.用户管理命令
su
su - root #切换用户,且切换系统环境变量
sudo visudo
通过配置/etc/sudoers实现提权,sudo以提权执行命令
sudo -i #切换到root用户且切换环境变量
sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
visudo 更改配置文件使用,有错误会提示
useradd、userdel、usermod
/etc/passwd /etc/shadow
useradd user_name 创建用户
-u 指定用户uid
-g 指定用户主组所属组gid,前提组已存在
-G 指定附加组,组要存在
-a 追加附加组,一般与G一起使用
-c 指定描述信息
-d 指定用户家目录
-s 指定用户的登录shell
-M 不创建用户家目录
userdel username 删除用户
-r 删除用户家目录和邮箱
usermod username 修改用户信息
-u 修改uid
-g 修改主组的gid
-G 修改附加组
-a 追加附加组,与G一起使用
-c 修改描述信息
-d 修改家目录
-m 移动用户家目录
-s 修改登录shell
-l 修改名称
usermod -l newuser1 newuser
usermod -md /data/new_home lutixiaya
groupadd、groupmems、groupmod
#/etc/group 存放组信息
groupadd groupname #创建组
-g 指定组gid
groupadd -g 344 jsdigname
groupmod groupname #修改组信息
-g 修改组的gid
-n 指定组的新组名
groupmems #管理组内成员
-a 添加用户到组
-g 指定组名
-d 删除组的成员
-p 清空组内用户
-l 列出组成员
groupmems -g staff -a student
groupmems -g staff -l
groupmems -d mike SUPPORT -g SUPPORT
chage
#修改密码的期限
chage [选项] 用户
chage -m 0 -M 90 -W7 -l14 user 13 分别修改用户密码的最短期限,最长期限,警告天数,和失效期限
常用选项:
-m --min #密码最短期限
-M --Max #密码最长有效期
-W #到期警告天数
-I #密码过期后保持活跃天数
-E #失效日期 -E 2022-10-10
8.网络操作命令
ifconfig
ifconfig #查看网卡信息
ifconfig ens33 up/down #激活、禁用网卡
ip
命令 | 解释 |
---|---|
ip link [show] | 查看设备信息 |
ip link set ens160 up/down | 激活、禁用网卡 |
ip addr [show] | 查看网络地址 |
ip addr add ip/netmask dev ens160 | 添加地址 |
ip addr del ip/netmask dev ens160 | 删除地址 |
ip route [show] | 查看路由表信息 |
ip route add 目标ip[/netmask] via 网关ip | 添加路由 |
ip route del 目标ip[/netmask] | 删除路由 |
ip(选项)(对象)
ip addr add 192.168.0.1/24 dev eth0 # 为eth0网卡添加一个新的IP地址192.168.0.1
ip route add 192.168.4.0/24 via 192.168.0.254 dev eth0 # 设置192.168.4.0网段的网关为192.168.0.254,数据走eth0接口
ping
icmp arp 地址解析协议 内⽹通信基于arp协议进⾏⼴播
ping www.baidu.com -c 4
ping www.baidu.com -t
ping -I ens38 www.baidu.com #-I指定网卡发送数据包
route
route -n
route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0 #增加一条到达224.0.0.0的路由。
route add -net 224.0.0.0 netmask 240.0.0.0 reject #增加一条屏蔽的路由,目的地址为224.x.x.x将被拒绝。
telnet
登录远程主机和管理(测试ip端口是否连通)
telnet 192.168.188.132
ssh
ssh user1@172.24.210.101
ssh -p 2211 root@140.206.185.170
scp
scp root@10.10.10.10:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/ #将远程主机文件拷到本主机
scp -P 2222 /opt/soft/nginx-0.5.38.tar.gz root@10.10.10.10:/opt/soft/scptest #将本机文件传给远程主机,-P指定端口
wget
wget -O wordpress.zip http://www.jsdig.com/download.aspx?id=1080
#指定目录、文件名下载
nc
用于探测端口
-u 使用UDP传输协议
-w 超时时间
-z 使用0输入输出
-v 显示过程
#TCP扫描端口
nc -v -z -w2 192.168.0.3 1-100
netstat ss
用来打印Linux中网络系统的状态信息
-a或--all:显示所有连线中的Socket;
-c或--continuous:持续列出网络状态;
-l或--listening:显示监控中的服务器的Socket;
-n或--numeric:直接使用ip地址,而不通过域名服务器;
-p或--programs:显示正在使用Socket的程序识别码和程序名称;
-r或--route:显示Routing Table;
-t或--tcp:显示TCP传输协议的连线状况;
-u或--udp:显示UDP传输协议的连线状况;
-v或--verbose:显示指令执行过程;
-V或--version:显示版本信息;
#网络连接状态 STATE:
CLOSED : 初始(无连接)状态。
LISTEN : 侦听状态,等待远程机器的连接请求。
ESTABLISHED: 完成 TCP 三次握手后,主动连接端进入 ESTABLISHED 状态。此时,TCP 连接已
经建立,可以进行通信。
TIME_WAIT : 在 TCP 四次挥手时,主动关闭端发送了 ACK 包之后,进入 TIME_WAIT 状态,等
待最多 MSL 时间,让被动关闭端收到 ACK 包。
服务器上有大量 TIME_WAIT 连接,如何优化 TCP 连接,快速释放 tcp 连接
MSL,即 Maximum Segment Lifetime,一个数据分片(报文)在网络中能够生存的最长时间, 在 RFC 793 中定义 MSL 通常为 2 分钟,即超过两分钟即认为这个报文已经在网络中被丢弃了。对于一 个 TCP 连接,在双方进入 TIME_WAIT 后,通常会等待 2 倍 MSL 时间后,再关闭掉连接,作用是为了 防止由于 FIN(最后一个挥手包)报文丢包,对端重发导致与后续的 TCP 连接请求产生顺序混乱
#linux 下默认 MSL 等待时间是 60 秒
cat /proc/sys/net/ipv4/tcp_fin_timeout
60
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout #通过缩短时间
time_wait 时间来快速释放链接
9.深入网络操作命令
nslookup
查询域名DNS信息 /etc/resolv.conf
nslookup(选项)(参数)(DNS服务器)
nslookup会连接到默认的域名服务器即/etc/resolv.conf的第一个dns地址
nslookup www.baidu.com
nslookup www.baidu.com 8.8.8.8
dig
可以用来测试域名系统工作是否正常
dig(选项)(参数)
-b<ip地址>:当主机具有多个IP地址,指定使用本机的哪个IP地址向域名服务器发送域名查询请求
dig www.baidu.com
traceroute
用于追踪数据包在网络上的传输时的全部路径,它默认发送的数据包大小是40字节
traceroute(选项)(参数)
traceroute www.baidu.com
traceroute -m 10 www.baidu.com # 跳数设置
traceroute -n www.baidu.com # 显示IP地址,不查主机名
traceroute -p 6888 www.baidu.com # 探测包使用的基本UDP端口设置6888
traceroute -q 4 www.baidu.com # 把探测包的个数设置为值4
traceroute -r www.baidu.com # 绕过正常的路由表,直接发送到网络相连的主机
traceroute -w 3 www.baidu.com # 把对外发探测包的等待响应时间设置为3秒
mtr
MTR简介
- MTR(My traceroute)是几乎所有Linux操作系统发行版本预装的网络测试工具,此工具也有对应的Windows操作系统版本,名称为WinMTR。WinMTR是MTR工具在Windows操作系统下的图形化实现,但进行了功能简化,仅支持设置MTR的部分参数。
- MTR工具将ping和traceroute命令的功能并入了同一个工具中,实现更强大的功能。
- mtr命令默认发送ICMP数据包进行链路探测。Linux操作系统上可以通过
-u
参数来指定使用UDP数据包用于探测, 而Windows操作系统上,WinMTR无法切换UDP数据包
tcpdump
tcpdump抓包_tcpdump抓包命令_mayue_csdn的博客-CSDN博客
tcpdump命令 是一款抓包,嗅探器工具,它可以打印所有经过网络接口的数据包的头信息,也可以使用
-w
选项将数据包保存到文件中,方便以后分析。
tcpdump(选项)
tcpdump -i eth1 #监视指定网络接口的数据包
tcpdump -i eth0 src host hostname #截获主机hostname发送的所有数据
tcpdump -i eth0 dst host hostname #监视所有送到主机hostname的数据包
tcpdump tcp port 23 and host 210.27.48.1
#获取主机210.27.48.1接收或发出的telnet包
namp
namp命令是一种网络扫描器,可以用来探测主机、子网、端口、操作系统、服务等信息
Nmap [ 扫描类型 … ] [ 通用选项 ] 扫描目标说明
Nmap 常用基础命令详解-腾讯云开发者社区-腾讯云 (tencent.com)
lsof
Linux lsof 命令 - sparkdev - 博客园 (cnblogs.com)
lsof 是 LiSt Open Files 的缩写,用于查看进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP),找回/恢复删除的文件
-a 指示其它选项之间为与的关系
-c <进程名> 输出指定进程所打开的文件
-d <文件描述符> 列出占用该文件号的进程
+d <目录> 输出目录及目录下被打开的文件和目录(不递归)
+D <目录> 递归输出及目录下被打开的文件和目录
-i <条件> 输出符合条件与网络相关的文件
-n 不解析主机名
-p <进程号> 输出指定 PID 的进程所打开的文件
-P 不解析端口号
-t 只输出 PID
-u 输出指定用户打开的文件
-U 输出打开的 UNIX domain socket 文件
-h 显示帮助信息
-v 显示版本信息
lsof /etc/passwd #那个进程在占用/etc/passwd
lsof -u1000 #查看uid是100的用户的进程的文件使用情况
lsof -i:80 #显示所有打开80端口的进程 -i TCP:1-1024
lsof -p 1152 #指定进程的 PID 可以输出该进程打开的所有文件
恢复删除文件
原理为:
当进程打开了某个文件时,只要该进程保持打开该文件,即使将文件删除,它依然存在于磁盘中。
lsof -i:80
找到使用被删除文件的进程,pid 和文件描述符
描述符所在路径 /proc/$pid/fd/文件描述符
cat /proc/8838/fd/7 >> file
10.磁盘、文件系统的命令
mount umount
mount 挂载磁盘
-a:将 /etc/fstab 中定义的进行挂载
-t: 指定文件系统 :nfs
-w: 读写挂载
-s-r: 只读挂载
-o
sync、async、defaults
umout 卸载磁盘
umount 挂载点/磁盘
du df
du
du -h file
-s, --summarize 仅显示总计,只列出最后加总的值。
df
df -hT
df -i #inode号使用情况
磁盘分区命令
fdisk
查看磁盘使用情况和磁盘分区
fdisk [选项] <磁盘>
-l, --list 显示分区
#进入分区后
n 创建分区
p 打印分区
w 保存
m 帮助
t 更改分区描述
parted
磁盘大于2T的场景使用
parted [选项] [设备名] [命令]
-a:指定对齐方式。
-s:不提示用户。
-l:列出所有分区信息
-i:交互式模式;
gdisk
gdisk 仅支持gpt
gdisk -l 查看gpt分区信息
gdisk 设备名 :分区
n:创建新分区
d:删除分区
p:打印分区表
t:修改分区id
w:保存分区表退出
q:不保存退出
resize2fs
用于调整ext
系列文件系统的大小
-P 显示预期操作
-p 显示进度
-s 显示详细信息
# 检查文件系统
e2fsck -f /dev/sda1
# 调整文件系统大小
resize2fs /dev/sda1 20G
xfs_growfs xfs_repair
xfs_growfs用于扩大xfs文件系统的容量
xfs_repair检查修复xfs文件系统
xfs_growfs [options] mountpoint
# 检查文件系统
xfs_repair /dev/sda1
# 扩展文件系统
xfs_growfs /mnt
fsck e2fsck
检查并且试图修复ext文件系统中的错误
-a:自动修复文件系统,不询问任何问题
-r:采用互动模式,在执行修复时询问问题,让用户得以确认并决定处理方式
fsck -y /dev/hda2
#e2fsck
-y 自动修复
-f 强制修复
dd
dd if=/dev/zero of=sun.txt bs=1M count=1
bs= 块大小;
count= 区块数
of=<文件>:输出到文件
if= 输入文件
dumpe2fs
显示ext2、ext3、ext4文件系统的超级快和块组信息
-b 显示文件系统中保留的损坏块
-o superblock=superblock 检查文件系统时,使用指定大小的超级块。此选项通常不需要,除非文件系统向导正在检查严重损坏的文件系统的剩余部分。
-o blocksize=blocksize 检查文件系统时,指定块大小。此选项通常不需要,除非文件系统向导正在检查严重损坏的文件系统的剩余部分。
-f 强制执行
-h 只显示superblock(超级块)信息,而不显示任何块组描述符详细信息
-i 显示从e2image获得的文件系统信息,使用设备作为image文件的路径名。
-x 以十六进制显示文件系统信息
-V 显示命令版本信息,并且退出
dumpe2fs -b /dev/sda1 #打印坏块
dumpe2fs /dev/sda1 #打印文件系统上的超级块和块组信息
dump
用于备份ext文件系统
dump(选项)(参数)
-0:表示进行完整备份。
-u:表示更新备份。
-f:表示指定备份文件名。
-z:表示使用 gzip 压缩。
-j:表示使用 bzip2 压缩。
dump -0uj -f /root/boot.bak.bz2 /boot/
mkfs
格式化文件系统
mkfs(选项)(参数)
fs:指定建立文件系统时的参数;
-t<文件系统类型>:指定要建立何种文件系统;
-v:显示版本信息与详细的使用方法;
-V:显示简要的使用方法;
-c:在制做档案系统前,检查该partition是否有坏轨。
mkfs -t ext4 /dev/sdb1
mkfs.ext4
mkfs.xfs
partprobe
分区后刷新分区表
mkswap swapon swapoff
创建swap交换分区
mkswap(选项)(参数)
-c:建立交换区前,先检查是否有损坏的区块;
mkswap /dev/sdb2
swapon 激活swap分区
-a:将/etc/fstab文件中所有设置为swap的设备,启动为交换区
-s:显示交换区的使用状况
mkswap -c /dev/hdb4 (-c是检查有无坏块)
swapon -v /dev/hdb4
swapoff关闭交换分区
swapoff /dev/sda2
sync
将内存中的数据写入硬盘
- buffer:为了解决写磁盘的效率
- cache:为了解决读磁盘的效率
11.系统关机
shutdown
shutdown -h now 指定现在立即关机
halt
halt -p # 关闭系统后关闭电源。
halt -d # 关闭系统,但不留下纪录。
init
#0 停机(千万不能把initdefault 设置为0)
#1 单用户模式
#2 多用户,没有 NFS(和级别3相似,会停止部分服务)
#3 完全多用户模式
#4 没有用到
#5 x11(Xwindow)
#6 重新启动(千万不要把initdefault 设置为6)
12.权限管理命令
文件目录权限:
r 4
w 2
x 1
目录默认最大777
文件默认最大666
- 文件:
r 读取文件内容,使用cat、more等命令查看
w 可以编辑修改文件内容
x 执行文件
- 目录:
r 可以查看目录下的文件,使用ls命令
w 可以新建,删除目录下的文件,重命名文件
x 能否进入到目录下
对于目录而言,至少要有rx权限
复制文件要对文件有r权限,对文件的目录有x权限
chmod
更改文件权限
chmod u+x test.txt
chmod 755 test.txt
- suid
以文件拥有人的身份执行程序(不能用在脚本上),二进制可执行文件/程序chmod u+s
chmod 4755
- sgid
以文件拥有组的身份执行程序(不能用在脚本上),二进制可执行文件/程序 用在目录上,该目录下创建的所有文件和目录的拥有组都继承该目录的拥有组,
chmod g+s
chmod 2755
- sticky
公共目录,每个用户只能管理自己的文件,root除外。
chmod o+t
chmod 1755
chown
更改文件拥有人,属组
chown user:group file
-R或——recursive:递归处理,将指定目录下的所有文件及子目录一并处理;
umask
/etc/profile中定义值
用户uid<199 umask默认为022
uid >=199的用户 umask值为002
setfacl
设置ACL权限 会改变文件的mask值,默认权限,文件的mask值,默认权限可能会影响用户设置的acl权限
setfacl 设置acl权限
getfacl 查看acl权限
- setfacl -m 设置和修改文件的acl权限
命令 | 功能 |
---|---|
setfacl -m u:user1:rwx /file | 给指定用户设置acl权限 |
setfacl -m u::rwx /file | 给文件的拥有人设置acl权限 |
setfacl -m g:group1:rwx /file | 给指定组设置acl权限 |
setfacl -m g::rwx /file | 给文件拥有组设置acl权限 |
setfacl -m o::rx /file | 给文件其他人设置acl权限 |
setfacl -m m::rwx /file | 设置文件的mask值 |
-n 可以避免设置acl权限时影响文件的mask值
-
setfacl -x 删除单个acl权限 :setfacl -x u:user1 /file
-
setfacl -b 清空文件的acl权限 setfacl -b /file
-R 递归acl权限
-
设置默认的acl权限,一般设置于目录 setfacl -m d:u:user1:rwx /directory
sudo 用户提权
配置文件
/etc/sudoers /etc/sudoers.d/
配置语法
支持别名,别名要大写
- 主机别名:Host_Alias 主机别名 = 主机1,主机2
- 用户别名:User_Alias 用户别名 = 用户1, 用户2
- 命令别名:Cmnd_Alias 命令别名 = 命令1,命令2
13.查看系统用户登陆信息
whoami
whoami
root
who
who
root tty1 2022-12-07 17:00
root pts/0 2023-05-07 15:07 (11.0.1.1)
w
w
16:12:52 up 2 days, 1:13, 2 users, load average: 0.67, 0.36, 0.27
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 07Dec22 7days 4.33s 4.33s -bash
root pts/0 11.0.1.1 Sun15 4.00s 0.71s 0.71s -bash
last lastb
last查看登录成功的信息
lastb查看登录失败的信息
14.系统性能监视
- 内存:top free vmstat mpstat iostat sar
- CPU: top vmstat mpstat iostat sar
- I/O: vmstat mpstat iostat sar
- 进程: ipcs ipcrm lsof strace ltrace ps
- 负载: uptime
vmstat
vmstat命令 的含义为显示虚拟内存状态(“Viryual Memor Statics”),但是它可以报告关于进程、内存、I/O等系统整体运行状态
vmstat(选项)(参数)
-a:显示活动内页;
-f:显示启动后创建的进程总数;
-m:显示slab信息;
-n:头信息仅显示一次;
-s:以表格方式显示事件计数器和内存状态;
-d:报告磁盘状态;
-p:显示指定的硬盘分区状态;
-S:输出信息的单位。
vmstat 1 5 # 每秒打印一次,共输出5次
vmstat -S m 1 10 # -S k 按kb单位展示,m 按mb单位展示,每秒打印一次,共输出10次
vmstat 3
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 320 42188 167332 1534368 0 0 4 7 1 0 0 0 99 0 0
0 0 320 42188 167332 1534392 0 0 0 0 1002 39 0 0 100 0 0
0 0 320 42188 167336 1534392 0 0 0 19 1002 44 0 0 100 0 0
0 0 320 42188 167336 1534392 0 0 0 0 1002 41 0 0 100 0 0
0 0 320 42188 167336 1534392 0 0 0 0 1002 41 0 0 100 0 0
字段说明:
Procs(进程)
- r: 运行队列中进程数量,这个值也可以判断是否需要增加CPU。(长期大于1)
- b: 等待IO的进程数量。
Memory(内存)
- swpd: 使用虚拟内存大小,如果swpd的值不为0,但是SI,SO的值长期为0,这种情况不会影响系统性能。
- free: 空闲物理内存大小。
- buff: 用作缓冲的内存大小。
- cache: 用作缓存的内存大小,如果cache的值大的时候,说明cache处的文件数多,如果频繁访问到的文件都能被cache处,那么磁盘的读IO bi会非常小。
Swap
- si: 每秒从交换区写到内存的大小,由磁盘调入内存。
- so: 每秒写入交换区的内存大小,由内存调入磁盘。
注意:内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。有些朋友看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,不能光看这一点,还要结合si和so,如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。
IO(现在的Linux版本块的大小为1kb)
- bi: 每秒读取的块数
- bo: 每秒写入的块数
注意:随机磁盘读写的时候,这2个值越大(如超出1024k),能看到CPU在IO等待的值也会越大。
system(系统)
- in: 每秒中断数,包括时钟中断。
- cs: 每秒上下文切换数。
注意:上面2个值越大,会看到由内核消耗的CPU时间会越大。
CPU(以百分比表示)
- us: 用户进程执行时间百分比(user time)
us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速。
- sy: 内核系统进程执行时间百分比(system time)
sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因。
- wa: IO等待时间百分比
wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。
- id: 空闲时间百分比
mpstat
mpstat命令 主要用于多CPU环境下,它显示各个可用CPU的状态信息。这些信息存放在/proc/stat
文件中
mpstat [选项] [<间隔时间> [<次数>]]
-P:指实战讲解磁盘分区命令fdisk
实战讲解磁盘分区命令fdisk
介绍MBR分区、主分区、扩展分区和逻辑分区
柱面是分区的最少单位
主引导记录(Master Boot Record,缩写:MBR),又叫做主引导扇区
分区表记录每个分区的属性,分区表每记录一个分区消耗16字节,分区表只能区分主分区和扩展分区
主分区:我们在硬盘划分出来可以直接使用的分区
扩展分区:我们在硬盘上划出来不能直接使用,要在上面再划分分区才能直接使用
逻辑分区:在硬盘上的扩展分区上再划分出来的分区
列出可用的磁盘设备使用情况和可用性
一块硬盘最多只能划分的分区主分区+扩展分区=4个 主分区只能划分4个
扩展分区只能最多有一个
P+E<=4
E<=1
GBT类型的分区可以划分128个主分区
fdisk命令使用
查看分区信息
fdisk -l 查看本机上所有硬盘的分区信息
[[email protected] ~]# fdisk -l
Disk /dev/sda: 21.5 GB, 21474836480 bytes <===显示硬盘大小
255 heads, 63sectors/track, 2610 cylinders <===显示柱面信息
Units = cylinders of 16065 * 512 = 8225280bytes <===显示柱面单位和每个柱面大小
Sector size (logical/physical): 512 bytes /512 bytes
I/O size (minimum/optimal): 512 bytes / 512bytes
Disk identifier: 0x00088aac
下面是显示sda硬盘分区信息
Device Boot Start End Blocks Id System /dev/sda1 * 1 26 204800 83 Linux
Partition 1 does not end on cylinderboundary.
/dev/sda2 26 287 2097152 82 Linux swap / Solaris
Partition 2 does not end on cylinderboundary.
/dev/sda3 287 2611 18668544 83 Linux
Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280bytes
Sector size (logical/physical): 512 bytes /512 bytes
I/O size (minimum/optimal): 512 bytes / 512bytes
Disk identifier: 0x00000000
fdisk -l /dev/sda查看系统上某个硬盘的分区信息
[[email protected] ~]# fdisk -l /dev/sda
Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280bytes
Sector size (logical/physical): 512 bytes /512 bytes
I/O size (minimum/optimal): 512 bytes / 512bytes
Disk identifier: 0x00088aac
Device Boot Start End Blocks Id System
/dev/sda1 * 1 26 204800 83 Linux
Partition 1 does not end on cylinderboundary.
/dev/sda2 26 287 2097152 82 Linux swap / Solaris
Partition 2 does not end on cylinderboundary.
/dev/sda3 287 2611 18668544 83 Linux
使用fdisk对硬盘sdb分区:
步骤:分区---更新分区表---格式化分区---挂载
[[email protected] ~]# fdisk /dev/sdb
Device contains neither a valid DOSpartition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with diskidentifier 0x885f5c02.
Changes will remain in memory only, untilyou decide to write them.
After that, of course, the previous contentwon‘t be recoverable.
Warning: invalid flag 0x0000 of partitiontable 4 will be corrected by w(rite)
WARNING: DOS-compatible mode is deprecated.It‘s strongly recommended to
switch off the mode (command ‘c‘) and change display units to
sectors (command ‘u‘).
Command (m for help): m <------m显示当前帮助
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibilityflag
d delete a partition <===删除一个分区
l list known partition types <===列出己知分区类型
m print this menu <===打印帮助
n add a new partition <===新建一个分区
o create a new empty DOSpartition table
p print the partition table <===显示分区表信息
q quit without saving changes <===不保存直接退出
s create a new empty Sundisklabel
t change a partition‘s system id <===改变一个分区类型ID
u change display/entry units
v verify the partition table
w write table to disk and exit <===保存并退出
x extra functionality (expertsonly)
~~新建一个分区:
fdisk /dev/sdb 然后按n,新建一个分区
[[email protected] ~]# fdisk /dev/sdb
Device contains neither a valid DOSpartition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with diskidentifier 0xc5331452.
Changes will remain in memory only, untilyou decide to write them.
After that, of course, the previous contentwon‘t be recoverable.
Warning: invalid flag 0x0000 of partitiontable 4 will be corrected by w(rite)
WARNING: DOS-compatible mode is deprecated.It‘s strongly recommended to
switch off the mode (command ‘c‘) and change display units to
sectors (command ‘u‘).
Command (m for help): n <===新建一个分区
Command action
e extended <===新建分区类型逻辑分区
p primary partition (1-4) <===新建分区类型主分区
p <===我们选择分区类型为主分区
Partition number (1-4): 1 <===分区编号
Firstcylinder (1-652, default 1): 1 <===分区的开始柱面
Last cylinder, +cylinders or+size{K,M,G} (1-652, default 652): 100 <===分区结束柱面 也可以用K、M、G来添加,如+1G、+500M 、+1024K
Command (m for help): p <===分完区后按P打印分区信息
Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280bytes
Sector size (logical/physical): 512 bytes /512 bytes
I/O size (minimum/optimal): 512 bytes / 512bytes
Disk identifier: 0xc5331452
Device Boot Start End Blocks Id System
/dev/sdb1 1 100 803218+ 83 Linux
~~删除一个分区
[[email protected] ~]# fdisk /dev/sdb
WARNING: DOS-compatible mode is deprecated.It‘s strongly recommended to
switch off the mode (command ‘c‘)and change display units to
sectors (command ‘u‘).
Command (m for help): p <===打印分区表信息
Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280bytes
Sector size (logical/physical): 512 bytes /512 bytes
I/O size (minimum/optimal): 512 bytes / 512bytes
Disk identifier: 0x61a28730
Device Boot Start End Blocks Id System
/dev/sdb1 1 100 803218+ 83 Linux
/dev/sdb2 101 200 803250 83 Linux
Command (m for help): d <===删除一个分区
Partition number(1-4): 2 <===选择要删除的分区编号
Command (m for help): p <===打印分区表信息
Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280bytes
Sector size (logical/physical): 512 bytes /512 bytes
I/O size (minimum/optimal): 512 bytes / 512bytes
Disk identifier: 0x61a28730
Device Boot Start End Blocks Id System
/dev/sdb1 1 100 803218+ 83 Linux
Command (m for help): w <===保存并退出
~~更新分区表
新建分区后,分区表是还没有新建的分区信息,要对分区表进行更新partprobe/dev/sda 更新分区表(对系统所在硬盘不生效,如果更新sdb,sdc系统不在的硬盘就会生效)
partx –a/dev/sda 强制刷新分区表
~~格式化分区
更新完分区别后,要对该分区进行硬式化
mkfs/dev/sda7 对sda7分区进行格式化(要重启系统)
默认mkfis格式化出来的文件系统是ext2,我们要是想把sda7格式化成ext4时,我们用mkfs.ext4来对sda7进行格式化并更改其文件系统类型 如:mkfs.ext4 /dev/sda7
mkfs.ext4 -b 1024 /dev/sdb3 可以格式化并修改分区block值为1024
格式化完分区后,会提示每隔23周或180天检查一下系统,
This filesystem will be automaticallychecked every 23 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
我们用tune2fs -c -1 /dev/sdb3 来处理
~~挂载分区和删除挂载分区
把新建的分区挂载到/目录上才能进行防问
临时挂载分区:
mount–a /dev/sda3 /aa
umount/dev/sda3 umount 设备或挂载点
系统启动自动挂载:
1 mkdir /aa 先在/目录新建一个目录并命名 如:aa
2 vim /etc/fstab 配置fstab把新建好的分区sda7挂载到/aa目录里,让其在系统启动时自动挂载到/aa目录里(要重启系统)
[[email protected] ~]# vi /etc/fstab
#
# /etc/fstab
# Created by anaconda on Thu Jan 9 18:07:20 2014
#
# Accessible filesystems, by reference, aremaintained under ‘/dev/disk‘
# See man pages fstab(5), findfs(8),mount(8) and/or blkid(8) for more info
#
UUID=02835af0-7725-42ec-90a4-b4cf397823c3/ ext4 defaults 1 1
UUID=3350ecad-ac12-4807-966b-f187a32838d6/boot ext4 defaults 1 2
UUID=0ee03381-3521-477c-ac99-703a1a7dbc20swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/sdb3 /mnt ext4 defaults 0 0
~~修改分区类型
[[email protected] ~]# fdisk /dev/sdb
WARNING: DOS-compatible mode is deprecated. It‘sstrongly recommended to
switch off the mode (command ‘c‘) and change display units to
sectors (command ‘u‘).
Command (m for help): p
Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x33b8ad83
DeviceBoot Start End Blocks Id System
/dev/sdb1 1 100 803218+ 83 Linux
/dev/sdb2 101 200 803250 83 Linux
/dev/sdb3 201 500 2409750 83 Linux
Command (m for help): t <===修改分区类型
Partition number (1-4): 3 <===选择要修改的分区编号
Hex code (type L to list codes): 82 <===填写修改的分区类型ID 可以按L来列出ID列表
Changed system type of partition 3 to 82 (Linux swap/ Solaris)
Command (m for help): p
Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x33b8ad83
DeviceBoot Start End Blocks Id System
/dev/sdb1 1 100 803218+ 83 Linux
/dev/sdb2 101 200 803250 83 Linux
/dev/sdb3 201 500 2409750 82 Linux swap / Solaris
Command (m for help): w <===保存并退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
刷新分区表:
在我们对分区类型进行了修改之后,一定刷新分区表才能有效
partprobe /dev/sda 在linx5以下的对系统所在硬盘分区生效,对linux5以上的硬盘中有系统所在分区的不会生效,如sda中有系统分区,就不生效,sdb中就生效
partx –a /dev/sda 强制刷新分区表
fdisk只对于小于2T的硬盘进行分区,大于2T的硬盘我们只能用parted来对硬盘进行分区
本文出自 “Mr.Xiong`s 运维日志” 博客,请务必保留此出处http://mrxiong2017.blog.51cto.com/12559394/1932657
以上是关于2023.5.9核心命令讲解实战的主要内容,如果未能解决你的问题,请参考以下文章
《机器人SLAM导航核心技术与实战》先导课:如何安装Ubuntu系统