常用命令

目录

1.帮助命令

man

man  [章节]  命令
man  ls
man 5 passwd

image-20230507152823680

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工具使用说明与结果分析 (aliyun.com)

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)

namp常用命令_YUKIDDDD的博客-CSDN博客

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/

配置语法

image-20220416095652440

支持别名,别名要大写

  • 主机别名: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:指定CPU编号。

mpstat -P ALL 2 3  #2s一次  3次

mpstat
Linux 3.10.0-1160.71.1.el7.x86_64 (centos)      08/14/2022      _x86_64_        (4 CPU)

04:28:36 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
04:28:36 PM  all    0.03    0.00    0.07    0.00    0.00    0.01    0.00    0.00    0.00   99.89
  • %user:表示处理用户进程所使用CPU的百分比。
  • %nice:表示在用户级别处理经nice降级的程序所使用CPU的百分比。
  • %system:表示内核进程使用的CPU百分比。
  • %iowait:表示等待进行I/O所占用CPU时间百分比。
  • %irq:表示用于处理系统中断的CPU百分比。
  • %soft:表示用于处理软件中断的CPU百分比。
  • %steal:在管理程序为另一个虚拟处理器服务时,显示虚拟的一个或多个CPU在非自愿等待中花费的时间的百分比。
  • %guest:表示一个或多个CPU在运行虚拟处理器时所花费的时间百分比。
  • %gnice:表示一个或多个CPU在运行经nice降级后的虚拟处理器时所花费的时间百分比。
  • %idle:CPU的空闲时间百分比。

iostat

iostat命令 被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析

iostat [选项] [时间间隔] [次数]
-c:仅显示CPU使用情况;
-d:仅显示设备利用率;
-k:显示状态以千字节每秒为单位,而不使用块每秒;
-m:显示状态以兆字节每秒为单位;
-p:仅显示块设备和所有被使用的其他分区的状态;
-t:显示每个报告产生时的时间;
-V:显示版号并退出;
-x:显示扩展状态。

iostat 2 3

iostat /dev/sda
Linux 3.10.0-957.el7.x86_64 (master)    05/08/2023      _x86_64_        (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.21    0.00    1.50    0.03    0.00   97.25

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               7.14         7.63        49.39    1410831    9136458
  • 磁盘设备利用情况报告:
    • Device:设备名称。
    • tps:每秒向磁盘设备请求数据的次数,包括读、写请求。
    • Blk_read/s:每秒从设备读取的数据量 (以扇区或者KB为单位)。
    • Blk_wrtn/s:每秒向设备写入的数据量 (以扇区或者KB为单位)。
    • Blk_read:从系统启动到当前读取的总数据量 (以扇区或者KB为单位)。
    • Blk_wrtn:从系统启动到当前写入的总数据量 (以扇区或者KB为单位)。
  • 网络文件系统利用情况报告:
    • op/s:每秒执行的操作数。
    • rpc_bklog/s:每秒RPC请求队列中等待执行的请求数。

如果使用-x选项,可以显示更详细的磁盘设备利用情况报告,包括以下内容:

  • rrqm/s:每秒对该设备的读请求被合并次数。
  • wrqm/s:每秒对该设备的写请求被合并次数。
  • r/s:每秒完成的读 I/O 设备次数。
  • w/s:每秒完成的写 I/O 设备次数。
  • rkB/s:每秒读数据量 (以KB为单位)。
  • wkB/s:每秒写数据量 (以KB为单位)。
  • avgrq-sz:平均每次设备I/O操作的数据大小 (以扇区为单位)。
  • avgqu-sz:平均I/O队列长度。
  • await:平均每次设备I/O操作的等待时间 (以毫秒为单位)。
  • svctm:平均每次设备I/O操作的服务时间 (以毫秒为单位)。
  • %util:一秒中有百分之多少的时间用于 I/O 操作。

sar

系统运行状态统计工具

sar [options] [-A] [-o file] [interval] [count]
-A: 显示所有的报告信息;
-b: 显示I/O速率;
-B: 显示换页状态;
-c: 显示进程创建活动;
-d: 显示每个块设备的状态;
-e: 设置显示报告的结束时间;
-f: 从指定文件提取报告;
-i: 设状态信息刷新的间隔时间;
-n: 报告网络统计信息。
-P: 报告每个CPU的状态;
-R: 显示内存状态;
-u: 显示CPU利用率;
-v: 显示索引节点,文件和其他内核表的状态;
-w: 显示交换分区状态;
-x: 显示给定进程的状态。
-r: 以分页方式显示输出,每页最多显示 100 行。  
-o: 输出选项,指定要显示的列。例如,`-o mrk,prt,cvg` 将显示 CPU 使用率、进程标识符、磁盘使用率 和 网络流量。  
-t: 时间戳选项,指定要在输出中添加时间戳。  
-s: 统计选项,指定要显示的统计数据的类型。例如,`-s us,ms` 将显示 CPU 使用率的 us 和 ms 时间段的平均值。  
-c: 选项用于指定要发送的命令。例如,`-c ls` 将显示当前目录中的文件和子目录列表。

15.进程管理命令

ipcs ipcrm ipcmk

ipcs

分析消息队列共享内存和信号量,进程间通信的状态

ipcs(选项)
-a, --all         显示全部(默认值)
-q, --queues      消息队列
-m, --shmems      共享内存
-s, --semaphores  信号量
-t, --time        显示最后一次操作时间
-p, --pid         显示创建者和最后一次操作者的PID
-c, --creator     显示创建者和拥有者的 userid, groupid
-l, --limits      显示对资源的限制
-u, --summary     显示当前状态摘要
--human           以友好的方式显示大小(eg: 500K)
-b, --bytes       以字节为单位显示大小(仅影响`-l`选项)
-i, --id <id>   显示指定ID的资源
-h, --help      显示帮助文档并退出
-V, --version   显示版本信息并退出

ipcrm

删除消息队列、信号集、或者共享内存标识,删除IPC资源

ipcrm [ -m SharedMemoryID ] [ -M SharedMemoryKey ] [ -q MessageID ] [ -Q MessageKey ] [ -s SemaphoreID ] [ -S SemaphoreKey ]

ipcmk

创建IPC资源

ipcmk -M size 创建一个大小为size字节的共享内存
ipcmk -Q 创建一个消息队列
ipcmk -S number 创建一个包含number个元素的信号量数组
ipcmk -p mode 设置资源的访问权限,缺省为0644

kill pkill killall

kill

kill通过手动发送信号操作进程。

kill -15 pid
kill -l  #查看信号
15  正常结束,默认值,让进程自己结束
9	强制结束,终端或者内核将进程结束。
1	重新加载配置文件
19	将进程后台暂停

killall

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

killall -9  vim

pkill

可以按照进程名杀死进程

pgrep -l gaim
2979 gaim

pkill gaim

pgrep

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

pgrep(选项)(参数)
选项
-U:	查找某个用户的进程id
-G:	查找某个组的进程id
-P:	根据父进程ID,查找所有子进程id
-l	打印进程名
-o	程序先启动的进程的pid
-n	程序后启动的进程pid
-d	定义多个进程之间的分隔符,默认换行符

ps pstree

ps

查看进程

-a	查看所有终端的进程
-u	打印进程的详细信息,包裹进程的拥有人,使用百分比
-x	打印不属于任何终端的进程
-e	所有进程 包括终端和非终端的
-f	额外信息    ef组合用
-o	指定输出信息格式  #ps -axo pid,user,command
--sort	指定排序参数   支持升/降序 +/-  ps aux --sort=-%mem

pstree

pstree命令 以树状图的方式展现进程之间的派生关系

-p:显示pid;
-a:显示每个程序的完整指令,包含路径,参数或是常驻服务的标示;
-u:显示用户名称;

contab

周期计划任务

crontab -l #列出当前用户下的 cron 服务的详细内容
crontab -u user1 -l #列出指定用户 user1 下的 cron 服务的详细内容
crontab -r #删除 cron 服务
crontab -e #编辑 cron 服务
/var/spool/cron  存放计划任务

设置周期计划任务

建议不使用crontab管理命令来创建周期计划任务,而是在/etc下相关文件写周期任务
#相关文件
/etc/contab				#系统任务调度配置文件
/etc/cron.d/			#自定义任务
/etc/cron.deny			#拒绝的用户
/etc/cron.allow			#允许的用户
cron.monthly/ #每月执行的脚本;
cron.weekly/ #每周执行的脚本;
cron.daily/ #每天执行的脚本;
cron.hourly/ #每小时执行的脚本;
任务书写规则
分  时  日	  月   周   用户    命令(尽量写绝对路径)
分:0-59
时:0-23
日:1-31
月:1-12
周:0-7
特殊符号:
*代表任意
/指定间隔时间   */10 每隔10分钟执行
-代表从某个数字到某个数字之间执行 7-12 
, 6,10-13,20  指定时间 6点,10到13点,20点执行

jobs,fg,bg

jobs查看当前终端的后台任务

vim  1.txt &   #将任务放到后台运行

fg

fg %jobnum 将后台进程放在前台运行

bg

bg %jobnum (恢复)后台运行

strace lstrace

strace命令是用来跟踪进程执行时的系统调用和所接收的信号的,它可以帮助我们诊断、调试和统计程序的行为

深入分析使用

c 统计每一系统调用的所执行的时间,次数和出错的次数等.
-d 输出strace关于标准错误的调试信息.
-f 跟踪由fork调用所产生的子进程.
-t 在输出中的每一行前加上时间信息.
-T 显示每一调用所耗的时间.
-v 输出所有的系统调用.一些调用关于环境变量,状态,输入输出等调用由于使用频繁,默认不输出.
-V 输出strace的版本信息.
-e expr 指定一个表达式,用来控制如何跟踪.格式:[qualifier=][!]value1[,value2]...
-e trace=set 只跟踪指定的系统 调用.例如:-e trace=open,close,rean,write表示只跟踪这四个系统调用.默认的为set=all.
-e trace=file 只跟踪有关文件操作的系统调用.
-e trace=process 只跟踪有关进程控制的系统调用.
-e trace=network 跟踪与网络有关的所有系统调用.
-e strace=signal 跟踪所有与系统信号有关的 系统调用
-e signal=set 指定跟踪的系统信号.默认为all.如 signal=!SIGIO(或者signal=!io),表示不跟踪SIGIO信号.
-e read=set 输出从指定文件中读出 的数据.例如: -e read=3,5
-e write=set 输出写入到指定文件中的数据.
-o filename 将strace的输出写入文件filename
-p pid 跟踪指定的进程pid.
-u username 以username的UID和GID执行被跟踪的命令

ltrace

用来跟踪进程调用库函数的情况

ltrace [option ...] [command [arg ...]]
-a 对齐具体某个列的返回值。
-c 计算时间和调用,并在程序退出时打印摘要。
-C 解码低级别名称(内核级)为用户级名称。
-d 打印调试信息。
-e 改变跟踪的事件。
-f 跟踪子进程。
-h 打印帮助信息。
-i 打印指令指针,当库调用时。
-l 只打印某个库中的调用。
-L 不打印库调用。
-n, --indent=NR 对每个调用级别嵌套以NR个空格进行缩进输出。
-o, --output=file 把输出定向到文件。
-p PID 附着在值为PID的进程号上进行ltrace。
-r 打印相对时间戳。
-s STRLEN 设置打印的字符串最大长度。
-S 显示系统调用。
-t, -tt, -ttt 打印绝对时间戳。
-T 输出每个调用过程的时间开销。
-u USERNAME 使用某个用户id或组ID来运行命令。
-V, --version 打印版本信息,然后退出。
-x NAME treat the global NAME like a library subroutine.(求翻译)

16.四剑客

grep egrep

-AX    		#匹配行及后面X行
-BX			#匹配行及前面X行
-CX     	#匹配行前后X行
-i 			#忽略大小写
-q			#静默输出
-o			#仅显示匹配到的内容
-n			#显示行号
-c			#统计匹配到的行数
-v			#匹配结果取反
-E			#扩展正则表达式

正则、扩展正则

image-20220329220849119

字符 作用
+ 匹配前一个字符一次或多次
[😕]+ 匹配:或/一次或多次
? 匹配前一个字符0次或1次
\ 表示或者,同时过滤多个字符串
() 括号内的视为一个整体,分组
a 匹配前面的字符n到m次
a 匹配前面的字符n到多次
a 匹配前面的字符n次
a 匹配前面的字符最多m次
\w 匹配数字字符和英文大小写[0-9a-zA-Z]
\W 匹配一个或多个非单词字符,如句号点号

sed

流编辑器

文件--->模式空间---->屏幕

正在处理的内容存放在模式空间(缓冲区)内,处理完成后 按照选项的规定进行输出或文件的修改

sed  options...   [SCRIPT]  [FILE...]
-r			#支持扩展正则
-n			#静默输出
-i			#直接修改源文件
-e			#多个匹配规则操作
-i.bak		#修改源文件,并生成备份
-----命令
 p  打印内容
 d   删除匹配的行
 a\text  在匹配到的行后追加内容 text
 i\text                           前追加内容
 c\text     替换匹配的行
 s/regexp/replacement/flags     查找并替换  g全局替换, i忽略大小写
 w  /path/to/somefile  将匹配到的内容另存到指定的文件
 g   全局替换
字符 解释
# #表示数字,指定要进行处理操作的行
$ 表示最后一行
/regexp/ 表示能够被regexp匹配到的行,可用#,%替换/
/regexp/l 匹配时忽略大小写
addr1,addr2 表示指定范围内的所有行,用数字(行号),也可以使用regexp代替
first~step 指定起始行以及步长
addr1,+N 指定行及以后的N行
sed-n 5p passwd 打印第5行 
sed-n $p passwd 打印最后一行
sed-n '1,5p' passwd 打印第1-5行
sed-n '/root/lp' passwd 匹配带有root关键词的行,并忽略大小写 
sed -n'\%root%lp' passwd 同上
sed'1,5d' passwd 删除第1-5行
sed-i.bak'1,5d' passwd 删除第1-5行,源文件被修改 sed'2a\abc' passwd 在文件第2行下面追加abc

awk

文本和数据进行处理的编程语言

awk脚本是由模式和操作组成的。

模式

  • /正则表达式/:使用通配符的扩展集。
  • 关系表达式:使用运算符进行操作,可以是字符串或数字的比较测试。
  • 模式匹配表达式:用运算符~(匹配)和!~(不匹配)。
  • BEGIN语句块、pattern语句块、END语句块:参见awk的工作原理

操作

  • 变量或数组赋值
  • 输出命令
  • 内置函数
  • 控制流语句
awk   [options]  '  script'  var=value file(s)
awk [options] -f scriptfile var=value file(s)

-F 				#指定分隔符
-v var=value 	#定义变量
-f				#从脚本文件读取awk命令

内置变量

内置变量 解释
FS 输入字段分割符,默认位空格
OFS 输出字段分隔符,默认为空格
RS 输入记录分隔符(换行符),指定输入时的换行符
ORS 输出记录分割符(换行符),指定输出时的换行符
NF number of Field,当前行的字段数,即当前行有几列
NR 行号,当前处理的文本行的行号
FNR 个文件分别计数的行号
FILENAME 当前文件名
ARGC 命令行参数的个数
ARGV 数组,保存的时命令行所给定的各参数
$0 当前处理行的整行内容
$n 当前行的第n各字段

awk脚本基本结构

awk ‘BEGIN{ commands } pattern{ commands } END{ commands }’	
  • 第一步:执行BEGIN{commands}中的语句,在awk读取输入流之前执行,可选项
  • 第二步: 从文件或标准输入读取一行,然后执行pattern{commands}语句块,会逐行扫描文件,默认执行{print} ,可选项
  • 第三步:当读至输入流末尾时,执行END{commands}语句块,可选语句块
awk '{print}' name.txt				#输出所有内容
awk 'NR==1,NR==3 {print}' name.txt	#输出第 1~3 行内容
awk 'NR==1;NR==3 {print}' name.txt	#输出第 1和第3 行内容
awk '(NR>=1)&&(NR<=3) {print}' name.txt	#输出第 1~3 行内容
awk '/nologin$/{print}' /etc/passwd		#输出以 nologin 结尾的行

find

find [dir...]  [查找匹配规则]  [处理]
#根据文件名,inode
find . -name "*.conf" -exec cp -r {} /tmp/\;
find . -inum 
#根据文件权限
find . -perm  644   #精准匹配权限,/444只要有一个满足即可,-444  至少为444的
#根据时间戳
-atime 文件最后一次被查看时间
-ctime 文件内容修改会变化
-mtime 文件属性变化就会变化,元数据
-amin -cmin -mmin以分钟为单位 
mtime +7   #7天之前
mtime 7    #第7天
mtime -7   #7天之内
#根据文件类型
-type f   #普通文件
      b   #块设备
#根据文件大小
-size  +100M
#根据文件拥有人,属组
-user   -uid
-group  -gid
-nouser -nogroup
#使用逻辑运算符多条件匹配
-a  and  且
-o   or  或
!和not   非
find /home \( -user user1 -a -user4 user4 \)
find . ! -user nobody
find /tmp \( -not -user root -a -not -name 'f*' \)
#常用处理
-delete
-exec command {} \;
find /etc/ -name "*.conf" -exec cp -a {} /tmp \;
find .... |xargs COMMAND
find -name "*.sh" | xargs chmod 755

17.其他

echo 
rpm
yum
history
nohup
watch
xargs
bc
expr
time
printf
alias
unalias
nc
exec
export
unset
type

nohup

nohup命令 可以将程序以忽略挂起信号的方式运行起来,被运行的程序的输出信息将不会显示到终端。

无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到$HOME/nohup.out文件中。

nohup wget site.com/file.zip
nohup ping -c 10 baidu.com

rpm,yum --软件包管理

rpm

rpm -ivh    		#安装,显示信息,
    -U				#升级
    -e				#移除
    -qa     		#列出所有安装包
    -ql  包名		   #列出安装的包的文件 	

数字签名

导入 GPG秘钥   rpm  --import   pubkey
rpm -qa |grep pubkey  查看秘钥
rpm  -K  RPM包  检验可靠性

rpm拆包提取文件

rpm2cpio 包名  |cpio -id

yum

可解决包之间依赖关系;将软件包放在目录下,生成软件包的索引——repodata,来解决依赖关系

yum install -y
yum group install  "包组名"  安装包组
yum reinstall
yum remove
yum group remove
yum update
yum repolist all 列出所有仓库的信息
yum list available|updates|installed  列出可用的|可更新|已安装的软件包
yum provides  

yum仓库配置文件 /etc/yum.repos.d/*.repo

[仓库名]
name=描述
baseurl=仓库的路径repodata所在的目录路径,支持file,http,ftp等
gpgcheck=是否验证秘钥  1启用校验,  0 不校验
enabled=是否启用仓库  1启用  0关闭
gpgkey=GPG秘钥位置的路径

创建私有yum源

  • 将rpm包放在一个目录下面
  • 将该目录通过http或者ftp共享出去
  • 安装creatrepo_c软件包,并执行creatrepo -v /packagedir
    • 会生成一个repodata的子目录
    • 软件包的所有元数据信息都放在repodata目录下
yum install -y createrepo_c
yum install -y --downloadonly --downloaddir=/tmp/myrepo  httpd -y
createrepo /tmp/myrepo

history

查看历史命令

history -c       #删除所有记录
        -d       #删除指定记录

历史记录存放在用户家目录下.bash_history

watch

可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令

-n # 或--interval  watch缺省每2秒运行一下程序,可以用-n或-interval来指定间隔的时间。
watch -n 1 -d netstat -ant 

nice

调整进程nice值,nice值范围 -20-19 数值越大优先级越低

nice -n 19  vim 1.txt  #启动时设置nice
nice -n  5  pid			#修改nice
posted @ 2023-05-09 03:07  loser_xu  阅读(63)  评论(0编辑  收藏  举报