Linux常用命令

Linux常用命令

对目录操作的命令

查看目录

ls :查看当前目录下的所有文件

ls -a :连同隐藏文件(开头为.的文件)的全部文件

ls -l或者ll :以长数据列出文件的属性、权限等数据

目录切换

cd / :返回到根目录

cd /usr :返回到根目录中的usr目录中

cd .. :返回上一级目录

显示所在目录

pwd [-P] :显示目前所在目录
-P :显示出确实的路径,而非使用连结 (link) 路径

创建目录

mkdir 目录名称

删除目录或文件

rm     目录或文件名称    :删除目录或文件
rm -r  目录或文件名称    :递归删除目录或文件
rm -rf 目录或文件名称    :递归删除目录或文件(不询问)

移动/修改/拷贝文件或目录

mv     当前文件路径  新文件路径   :移动文件
cp -r  当前文件路径  新文件路径   :递归拷贝文件
mv     当前文件名    新文件名     :修改文件名

对文件操作的命令

查看文件

cat  文件路径               :由第一行开始显示文件内容,默认显示最后10行
tail [-n number] 文件      :取出文件后面几行
-n                         :后面接数字,代表显示几行的意思
-f                         :表示持续侦测后面所接的档名,要等到按下ctrl+c才会结束tail的侦测,常用于查阅正在改变的日志文件

cat也可以用来创建文件
cat >filename  创建名为filename文件,ctrl+c结束此文件的录入
cat >filename <<end  创建名为filename文件,当输入end字符回车后结束此文件的录入
搭配grep 可以做到查看日志中包含特定字符的文本行
cat /opt/start.log | grep info > 1.log  查找start.log日志中包含info文本行并记录到1.log文件中

编辑文件

通常使用vi/vim编辑器编辑文件

vi  文件路径             :通过vi编辑器编辑文件,vim编辑器同理
命令模式:
可以控制光标上下移动
查找字符: /字符    n下一个  N上一个
按i进入输入模式
按:进入底线命令模式
输入模式:
可以正常编辑文件
按esc退回到命令模式
底线命令模式:
wq: 保存并退出
q!:不保存退出
q:正常退出(在未编辑的情况下)
按esc退回命令模式

[[:移动到第一行
]]:移动到最后一行

用户(user)和用户组(group)管理命令

用户管理命令

# 查看用户列表
cat /etc/passwd

一行记录一个用户,字段用":"分隔,格式如下:
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
eg:root:x:0:0:root:/root:/bin/bash

# 添加用户xx 其用户组为xx
useradd xx -g xx

# 为xx用户设置密码
passwd xx

# 删除用户xx
userdel -r xx

## 修改用户信息 usermod -xx
# 将xx用户添加到group1中
usermod -g group1 xx

# 将xx用户名更改为 user1
usermod user1 xx

# 切换用户xx
su xx

# 以root用户的权限操作xxx命令
sudo xxx

# 查看当前登陆用户名
whoami

用户组管理命令

# 查看用户组
cat /etc/group

# 添加用户组xx
groupadd xx

# 删除用户组xx
groupdel xx

# 显示用户所属的用户组
groups

对文件属性操作的命令

chown:更改文件属主,也可以同时更改文件属组

chown [–R] 属主名 文件名
chown [-R] 属主名:属组名 文件名
-R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。

chmod:更改文件9个属性

chmod [-R] xyz 文件或目录
owner/group/others(拥有者/组/其他) 三种身份各有自己的 read/write/execute 权限 
r:4 w:2 x:1 
xyz指数字类型的权限属性,为 rwx 属性数值的相加

find命令

find是Linux和类Unix操作系统中常用的命令,用于在文件系统中查找文件和目录

find path -option [-exec|-ok command {} \;]
path: find命令查找的目录路径,其中"."表示当前目录,"/"表示系统根目录,默认是当前执行命令的目录路径。
-option: 选项
-exec command {} \; :对搜索的结果执行shell命令,{}表示被匹配到的文件名,\;表示命令结束
-ok command {} \; :和-exec的作用相同,在执行每一个命令之前,都会给出提示,让用户确定是否执行

常用选项:
-name 匹配模式: 根据文件名查找文件
-iname 匹配模式: 与-name相同,但不区分大小写
-type 类型: 根据文件类型查找,d:目录,f:普通文件
-size [+|-] 文件大小: 根据文件大小查找, +表示大于,-表示小于,不写加减号表示等于,文件大小单位: b-块(512字节),c-字节,w-字(2字节),k-千字节,M-兆字节,G-吉字节
-perm 权限(777): 根据文件权限查找,读权限:4,写权限:2,操作权限:1
-mtime [+|-] 天数: 根据文件更改时间来查找文件,-表示天数以内,+表示天数以外,不加表示当天数
-atime [+|-] 天数: 根据文件访问时间来查找文件
-ctime [+|-] 天数: 根据文件创建时间来查找文件
-user 用户名: 根据文件属主来查找
-group 组名: 根据文件属组来查找

示例:
1.查找当前路径下,所有后缀为txt的普通文件
find . -type f -name "*.txt"

2.查找当前路径下,文件名为Test的目录,不区分大小写
find -type d -iname "Test"

3.查找当前路径下,文件大小大于10兆字段的文件
find -size +10M

4.查找当前路径下,文件权限为777的文件
find -perm 777

5.查找当前路径下后缀名为html的文件,并展示文件信息
find . -name "*.html" -exec ls -l {} \;

6.查找当前路径下,文件创建时间在3天外的文件
find -ctime +3

7.查找当前路径下,文件属主和属组均为root的文件
find -user root -group root

xargs命令

xargs是一个在Unix和类Unix系统中使用的命令,它能够将标准输入的数据转换成命令行参数,并传递给指定的命令执行。xargs命令常用与在命令行中处理文件列表,尤其是在需要将多个文件作为参数传递给其他命令时。

xargs [选项] 命令
常用选项:
-a: 从文件中读取参数
-d: 指定输入数据之间的分隔符,而不是用空格分隔
-l: 每个命令行最多使用一个非空白输入行
-n num: 每个命令行最多使用num个参数
-t: 执行命令前打印命令

注:
xargs默认使用换行符作为分隔符,如果需要指定其他分隔符,可以使用-d选项
xargs不会执行空命令行,它会跳过空行

工作原理:
1.读取标准输入: xargs会从标准输入读取数据。
2.解析数据: xargs会解析数据,将其分割成命令行参数。
3.格式化数据: xargs可以对数据进行格式化,以便更好地执行命令行参数。
4.执行命令: xargs将格式化后的数据作为参数传递给指定的命令,并执行该命令。

示例:
1.从文件中获取命令行参数并打印到标准输出
xargs -a demo.txt echo

2.指定字符'e'为分隔符,进行打印
cat demo.txt |xargs -d e echo

3.指定每个命令最多执行一个非空白输入行,执行前打印命令
cat demo.txt |xargs -l -t echo

4.结合find命令删除指定txt后缀的文件
find ./ -name "*.txt" |xargs rm

对压缩包与安装包操作的命令

压缩包命令

-c: 建立压缩档案 
-x:解压 
-t:查看内容 
-r:向压缩归档文件末尾追加文件 
-u:更新原压缩包中的文件
这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。
-z:有gzip属性的 
-j:有bz2属性的 
-Z:有compress属性的 
-v:显示所有过程 
-O:将文件解开到标准输出
-f: 使用档案名字,这个参数是最后一个参数,后面只能接档案名。必写的!!! 

压缩

tar –cvf a.tar 目录路径       // 将目录里所有文件打包成tar形式
tar –czf a.tar.gz 目录路径    // 将目录里所有文件打包成tar.gz形式
tar –cjf a.tar.bz2 目录路径   // 将目录里所有文件打包成tar.bz2形式
tar –cZf a.tar.Z 目录路径     // 将目录里所有文件打包成tar.z形式
zip jpg.zip 目录路径          // zip格式的压缩,需要先下载 zip for linux

解压

tar –xvf file.tar         // 解压 tar 包 
tar -xzvf file.tar.gz     // 解压 tar.gz 
tar -xjvf file.tar.bz2    // 解压 tar.bz2 
tar –xZvf file.tar.Z      // 解压 tar.Z 
unzip file.zip            // 解压 zip 

安装包命令(rpm)

由于rpm的参数众多这里只挑常用的参数解释
-a        							查询所有套件
-e<套件档>或--erase<套件档>  		                        删除指定的套件
-i        							显示套件的相关信息
-i<套件档>或--install<套件档>  	                                安装指定的套件档
-q  								使用询问模式,当遇到任何问题时,rpm指令会先询问用户
-v  								显示指令执行过程
-h或--hash  						        套件安装时列出标记
-p<套件档>+  						        查询指定的RPM套件档
-l  								显示套件的文件列表
--nodeps  							不验证套件档的相互关联性

示例

rpm -ivh a.rpm           :安装a.rpm包并在安装过程中显示正在安装的文件信息及安装进度
rpm -ivh a.rpm --force   :强制安装a.rpm
rpm -qpl java  		 :查询rpm包即将安装的位置
rpm -qa | grep java      :查看java是否被安装
rpm -e --nodeps java     :忽略依赖关系,卸载java软件包

管理系统的命令(systemctl)

systemctl是Systemd(system daemon)的主命令,用于管理系统(检查和控制各种系统服务和资源状态)

# 重启系统
systemctl reboot

# 关闭系统
systemctl poweroff

# 查看所有配置文件状态
# 每个配置文件有四种状态
# enabled: 已建立启动链接
# disabled: 没建立启动链接
# static: 该配置文件没有[install]部分(无法执行),只能作为其他配置文件的依赖
# masked: 该配置文件被禁止建立启动链接
systemctl list-unit-files

# 列出正在运行的Unit
systemctl list-units

# 显示单个Unit的状态
systemctl status xx.service

# 启动一个服务
systemctl start xx.service

# 停止一个服务
systemctl stop xx.service

# 重启一个服务
systemctl restart xx.service

# 重新加载一个服务的配置文件
systemctl reload xx.service

# 重载所有修改过的配置文件
systemctl daemon-reload

# 显示单个Unit的配置参数
systemctl show xx.service

# 激活一个服务并设置服务为开启自启动
systemctl enabled xx.service

# 取消服务的开启自启动
systemctl disable xx.service

查询端口号使用情况(netstat)

常用参数
-a 显示所有连接
-t 显示tcp连接
-u 显示udp连接
-l 显示监听端口的链接
-p 显示监听端口对应的程序
-n 禁止将端口号转换成别名显示

常用命令
netstat -anp|grep 端口号   :查询端口号的状态,监控状态为LISTEN则表示被占用
netstat -nultp            : 查询所有已经使用的端口信息

查看磁盘使用量的命令(du/df)

du(dias usage):显示文件夹和文件的磁盘占用
-h            :以人类可读的形式展示磁盘使用量的单位名称(K/M/G)
--max-depth=X :控制查询的深度,X表示深度为多少
常用命令:
du -h
du -h --max-depth=1
du -ah .|sort -hr  :与sort结合,查看当前文件夹和其子文件夹下的大小排序
du -sh *|sort -hr  : 与sort结合,查看当前文件夹第一级的大小排序

df(disk free):显示文件系统的磁盘占用
-h            :以人类可读的形式展示磁盘使用量的单位名称(K/M/G)
常用命令
df -h

清理屏幕

clear

ip address(ip addr)

Iproute2是一个实用程序集合,用于在Linux中控制TCP/IP网络和流量控制。Iproute2通常是由一个名为iproute和iproute2的包中提供,它由几个工具组成,其中最重要的是ip和tc。ip控制ipv4和ipv6配置,tc表示流量控制。其中ip address命令是IP工具下的指令,用于查看网络接口及其地址信息。

以centos7为例,想要使用ip address命令,需要下载Iproute2的工具包
yum install iproute -y

ip addr add ip dev 网络接口名称
新增网络接口的ip地址
eg:
设置eth0网卡IP地址192.168.0.1/24
ip addr add 192.168.0.1/24 dev eth0

ip addr delete ip dev 网络接口名称
删除网络接口的ip地址
eg:
删除eth0网卡IP地址192.168.0.1/24
ip addr del 192.168.0.1/24 dev eth0

ip address flush dev 网络接口名称
删除网络接口的所有ip地址
eg:
删除eth0网卡的所有ip地址
ip address flush dev eth0

ip addr show
显示系统中所有网络接口(网卡)及其详细信息,包括接口名称、MAC地址、IP地址、子网掩码、广播地址、网络类型、状态、传输单元大小等。

eg: 查看当前系统的网络接口信息
[root@localhost ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:bf:b1:25 brd ff:ff:ff:ff:ff:ff
    inet 192.168.3.140/24 brd 192.168.3.255 scope global noprefixroute dynamic ens33
       valid_lft 1139sec preferred_lft 1139sec
    inet6 fe80::288d:30ae:aaa1:f877/64 scope link noprefixroute
       valid_lft forever preferred_lft forever


1:lo 本地回环网络接口
2:ens33 以太网网络接口
网卡参数:
LOOPBACK: 回环,电子信号、数据流等数据送回发送者,用于本机通信
UP: 表示网卡处于启动状态
LOWER_UP: 表示物理连接正常,即网线是插上的
BROADCAST: 表示网卡有广播地址,可以发送广播包
MULTICAST: 表示网卡可以发送多播包

mtu 1500: 最大传输单元为1500字节,最大传输单元(Maximum Transmission Unit-MTU),表示网络可以传输的最大数据包大小,以字节为单位

qdisc pfifo_fast: 排队规则(queueing discipline),排队规则为pfifo_fast,内核如果需要通过某个网络接口发送数据包,它都需要按照当前接口配置的排队规则把数据包加入队列。pififo_fast规则的队列包含三个波段(band),在每个波段里面,使用先进先出规则。
qdisc noqueue: 排队规则为noqueue。无队列。

state UNKNOWN: 网络接口状态未知
state UP: 网络接口已启用

group default: 接口组为默认的

qlen 1000: 传输队列长度为1000

link/loopback: 接口的MAC(物理)地址是:00:00:00:00:00:00
link/ether: 接口的MAC地址是:00:0c:29:bf:b1:25

brd: 广播地址

inet: IPV4地址

scope host: 本机有效
scope global: 全局有效

valid_lft forever: 该地址的有效使用期限为无限

preferred_lft forever: 该地址的首选生存期为无限

inet6: IPV6地址

时间命令

date	:显示当前时间
date -R :显示当前时区
hwclock :显示硬件时钟的当前时间,硬件时钟是指主机板上的时钟,也就是BIOS画面设定的时钟,当Linux启动时,系统时钟会读取硬件时钟,之后系统时钟独立运行

修改当前时间:
date -s "08:00:00" : 修改时:分:秒
date -s "2022-08-01 08:00:00" : 修改年-月-日 时:分:秒
hwclock -w :将时间写入BIOS(同步到硬件时钟),如果仅仅改动系统时钟则不需要此命令

修改时区
tzselect :选择要修改的时区(建议选择Asia-China-Shanghai 东八区)
此命令不会改变时区,提供给你该时区的参数,添加到配置文件中
如果选择的是中国上海则需要添加的参数为: TZ='Asia/Shanghai'; export TZ
编辑配置文件 vi /etc/profile  把参数添加到最后一行
使修改的参数生效: source /etc/profile
参数生效后时区就更改成功了

查看系统环境变量命令(export)

export -p : 显示当前所有环境变量
设置环境变量(对所有用户有效)
进入profile文件: vi /etc/profile
添加环境变量: export PATH=$PATH:/opt/java/jdk1.8.0_291/bin
保存退出了,让修改的参数生效: source /etc/profile

结束进程命令(kill)

kill -9 xx       : 终止进程ID号(PID)为xx的进程
//此种方法一般常用于停止指定的服务 eg:通过java中的jps工具查看各个服务的PID,通过kill命令来停止服务以达到更换jar包的目的

nohup命令

nohup(no hang up) 不挂起,用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行

nohub 执行命令 [arg] [&]

arg: 用于指定输出的文件
&: 让命令后台执行,终端退出后命令仍然执行


eg:
后台执行run.sh脚本
nohup sh run.sh &

后台执行run.sh脚本,将标准错误2重定向到标准输出1,标准输出1再被重定向到run.log文件
nohup sh run.sh >run.log 2>&1 &

后台执行run.sh脚本,将执行命令的输出重定向到/dev/null(相当于丢弃执行命令的输出)
nohup sh run.sh >/dev/null &



注:
默认情况下,会输出到当前目录下的nohup.out文件中,
如果当前目录下的nohup.out文件无法写入,则会输出到$HOME/nohup.out文件中

2>&1 >run.log
将标准错误重定向到标准输出,标准输出1再被重定向输入到run.log文件
(就是标准错误输出和标准输出都输出到run.log文件中)

文件操作符
0 :stdin(standard input 标准输入)
1 :stdout(standard output 标准输出)
2 :stderr(standard err 标准错误输出)

/dev/null:特殊的设备文件,会将接收到的任何数据丢弃

中断命令

ctrl+c    :强制中断程序的执行
ctrl+z    :将任务中断,但此任务没有结束,仍在进程中维持挂起状态
对此有两个命令: fg : 命令被中断的任务在前台重新启动
              bg : 命令被中断的任务在后台执行

校验文件完整性的命令

通过计算文件的哈希值,来对比两个文件是否相同或下载的文件是否完整

md5sum xx
通过Hash算法-MD5计算文件的哈希值

sha256sum xx
通过Hash算法-SHA256计算文件的哈希值

sha512sum xx
通过Hash算法-SHA512计算文件的哈希值

统计数量命令(wc)

wc命令用于统计,通常会配合管道使用
常用参数
-c 统计字节数
-m 统计字符数
-w 统计字数
-l 统计行数
-L 统计最长行的长度
eg:
查看配置文件并输出其行数
cat redis.conf |wc -l

查看系统基本信息

查看cpu信息: cat /proc/cpuinfo
物理核数(cpu颗数): (不重复的physical id个数) cat /proc/cpuinfo | grep 'physical id' | sort | uniq | wc -l
cpu核数(一颗CPU上面能处理数据的芯片组的数量): cat /proc/cpuinfo |grep 'cpu cores'|uniq|awk '{print $4}'
逻辑cpu核数: 一般情况下[逻辑cpu核数=物理核数xcpu核数],如果支持开启超线程技术(HT)则为[逻辑cpu核数=物理核数xcpu核数x2] cat /proc/cpuinfo |grep 'processor'|wc -l
查看内存信息: cat /proc/meminfo

远程登陆(ssh)与远程拷贝(scp)命令

ssh root@192.168.0.3 :  远程以root身份登陆ip为192.168.0.3的主机
scp -r /home/test root@192.168.0.3:/opt/demo : 将本地/home/test下的所有文件拷贝到主机ip为192.168.0.3的/opt/demo路径下
scp -r root@192.168.0.3:/opt/demo  /home/test : 将主机ip为192.168.0.3的/opt/demo路径下的所有文件拷贝到本地的/home/test路径下
-r表示以递归的方式复制 用于拷贝目录,拷贝文件可加可不加

查看进程(ps)

ps(process status):用于显示当前系统的进程状态
常用参数
-a  :显示所有终端机下执行的程序,除了阶段作业领导者之外
a   :显示现行终端机下的所有程序,包括其他用户的程序
-A  :显示所有程序
-e  :和指定”A”选项相同
-f  :显示UID,PPIP,C与STIME栏位
u   :以用户为主的格式来显示程序状况
x   :显示所有程序,不以终端机来区分

显示线程
-L :将LWP与NLWP加入列中
LWP(light weight process):轻量级进程,即线程
NLWP(number of light weight process): 线程的数量
常用命令:
显示所有进程
ps -ef
ps -aux
查询指定进程
ps -ef | grep java
显示所有线程
ps -eLf

查看历史命令(history)

当想看历史记录时,就可以用history命令来查看。这些命令会记录在/root/.bash_history中(记录的是上一次登录执行过的命令,本次登录的命令暂时存储在内存中,注销成功后会写入文件中),默认记录1000条命令(可以通过修改配置文件/etc/profile中的HISTSIZE参数来提高或减少记录次数,之后通过命令source /etc/profile让配置文件立即生效)

history :显示所有的历史命令
history n :显示前n条命令
history -c :清空命令历史
history -r :将历史记录读入历史命令的列表中
注: 如果想要使history命令显示历史命令时间,需要修改配置文件/etc/profile,加入
export HISTTIMEFORMAT="%y-%m-%d %H:%M:%S"
之后执行source /etc/profile即可生效

curl命令

cURL是一个利用URL语法在命令行下工作的文件传输工具

不带任何参数时,curl默认是发起GET请求
eg: curl https://www.baidu.com

-A 
指定客户端的用户代理标头,即User-Agent。默认为'curl/curl版本号'
eg: 模拟浏览器发送请求
curl -A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' https://www.baidu.com

-b
向服务端发送Cookie
eg: 向服务器发送包含两个字段的Cookie
curl -b 'TEST_ID=1;TEST_STATUS=1' https://www.baidu.com

-c
将服务器回应所设置的Cookie写入指定的文本文件中
eg: 接收服务器回应所设置的Cookie写入cookies.txt文本文件中
curl -c cookies.txt https://www.baidu.com

-X
指定HTTP请求的方法
eg: 指定发出POST请求
curl -X POST https://www.baidu.com

-F
用于from-data(表单)的方式请求
eg:发送一个form-data形式的POST请求
curl -X POST -F 'name=sam' -F 'age=5' https://passport.baidu.com/cap/init

-d
用于发送请求体
-H
添加请求头信息
eg: 发送一个包含请求体的POST请求,请求头添加文本格式为json
curl -X POST -d '{"name":"sam","age":5}' -H 'Content-Type: application/json' https://passport.baidu.com/cap/init

-x
指定HTTP请求的代理服务器来发送请求
eg: 指定由test:8080 代理服务器来发送请求
curl -x test:8080 https://www.baidu.com

-o
将服务器的响应结果保存成文件
eg: 将响应结果保存到data.txt文件中
curl -o data.txt  https://www.baidu.com

-u '用户名:密码'
用于设置发送请求到服务器的身份认证,相当于请求头添加'Authorization: xx'
eg: 发送一个包含身份认证的请求
curl -u 'sam:123456' https://passport.baidu.com/cap/init
eg: 向elasticsearch发送GET请求,包含请求体,请求体格式为json,需要身份验证
curl -X GET -d '{"query":{"term":{"test_key":{"value":"123"}}}}' -u 'sam:123456' -H 'Content-Type:application/json' loaclhost:9200/test-file/_search

-v
输出通信的整个过程
eg: 输出请求url的整个过程
curl -v  https://www.baidu.com

--trace
输出原始的二进制数据
eg: 将输出的二进制数据写入data.txt文件中
curl --trace data.txt  https://www.baidu.com

echo命令

echo命令是一个内置的命令行工具,它将字符串打印到标准输出或输出重定向到文件。通常在shell中用于打印命令的输出,也在bash shell脚本中经常使用。

echo 选项 待输出的字符串
选项
-e:支持反斜杠字符的转义
-E:禁用反斜杠字符的转义(默认选项)
-n:取消输出后行末的换行字符

反斜线字符:
\\:输出\字符
\a:输出警告声
\b:退格键(删除前一个字符)
\c:取消输出后行末的换行字符,和-n选项一致
\f:换页符(换行但光标仍旧停留在原来的位置)
\n:换行符(换行且光标移至行首)
\r:回车键(关闭移至行首但不换行)
\t:制表符(插入tab)
\v:垂直制表符
\0nnn:按照八进制ASCII码表输出字符,nnn是三位八进制数
\xhh:按照十六进制ASCII码表输出字符,hh是两位十六进制数

eg:
查看echo的帮助
/bin/echo --help
查看echo的版本号
/bin/echo --version
打印基本的消息
echo "hello this is a test"
打印带有转义字符的消息
echo -e "hello\nthis\tis\ta\ttest"
打印环境变量的消息
echo "JAVA_HOME value is $JAVA_HOME"
打印消息输出重定向到文件
echo "hello" >demo.txt

查看磁盘io

磁盘i/o的性能指标

  • 使用率:ioutil,磁盘处理I/O的时间百分比(一秒中有百分之多少用于I/O操作)
  • IOPS:每秒的I/O请求数(r/s+w/s 每秒发送给磁盘的读/写请求数)
  • 吞吐量/带宽:每秒的I/O请求数据量(rkB/s+wkB/s 每秒从磁盘读取/向磁盘写入的数据量)
  • 响应时间:I/O请求发出到收到响应的时间(r_await+w_await 读请求/写请求处理完成等待时间)
  • 饱和度:磁盘处理I/O的繁忙程度(没有直接的数据展示,根据平均队列长度或响应时间与基准测试结果进行对比来估算)

查看磁盘i/o性能的命令

iostat

安装命令: yum install sysstat

iostat [参数] [时间] [次数]
参数:
-c :仅显示cpu状态
-d :显示磁盘使用情况
-k :以KB为单位显示(默认)
-m :以MB为单位显示
-t :显示终端和CPU信息
-x :显示详细信息

eg: 显示详细信息,每隔1秒显示1次,共显示3次
iostat -x 1 3

参数 含义
rrqm/s 每秒合并的读请求数
wrqm/s 每秒合并的写请求数
r/s 每秒发送给磁盘的读请求数
w/s 每秒发送给磁盘的写请求数
rkB/s 每秒从磁盘读取的数据量
wkB/s 每秒向磁盘写入的数据量
avgrq-sz 平均每次设备I/O操作的数据量
avgqu-sz 平均每次发送给设备的I/O队列长度
await 平均每次设备I/O操作的等待时间(响应时间)
r_await 读请求处理完毕等待时间
w_await 写请求处理完毕等待时间
svctm 平均每次设备I/O操作的服务时间
%util 磁盘处理I/O的时间百分比(除了多磁盘的情况,当使用率100%则表示该设备接近满负荷运行)

iotop

安装命令: yum install iotop

iotop [参数]
-o :仅显示正在产生I/O的进程或线程
-b :非交互模式,用于记录日志
-n xx :设置监测次数,默认无限次
-d xx :设置每次监测的间隔时间,默认为1秒
-p PID :指定监测的进程或线程
-u USER :指定监测某个用户产生的I/O
-P :仅显示进程,默认显示所有线程

交互按键(与top命令类似)
<-和-> :左右方向键,对不同列进行排序(默认以io占用率列进行排序,由大到小)
r :反向排序
o :仅显示正在产生I/O的进程或线程
p :仅显示进程,默认显示所有线程
q :退出

参数 含义
TID 线程ID
PRIO 优先级
USER 线程所有者
DISK READ 从磁盘中读取的速率
DISK WRITE 往磁盘里写入的速率
SWAP IN swap交换百分比
IO IO占用率
COMMAND 具体进程命令
Total DISK READ 从磁盘中读取的总速率
Total DISK WRITE 往磁盘里写入的总速率
Actual DISK READ 从磁盘中读取的实际速率
Actual DISK WRITE 往磁盘中写入的实际速率

查看网络io

网络i/o的性能指标

  • 带宽: 表示链路的最大传输速率,单位:b/s(比特/秒),带宽决定了网络的承载能力
  • 吞吐量: 表示单位时间内成功传输的数据量,单位:b/s(比特/秒),吞吐量受带宽限制,吞吐量/带宽表示该网络的使用率
  • 时延: 表示从网络请求发出后,一直到收到远端响应,所需要的时间延迟,不同场景,此指标有不同的含义。比如既可以把建立连接需要的时间作为时延指标也可以把一个数据包往返所需的时间作为时延指标
  • PPS: 包每秒(Packet Per Second),表示以网络包为单位的传输速率,PPS用来评估网络的转发能力,受网络包大小影响
  • 并发连接数: TCP的连接数数量
  • 丢包率: 网络丢包百分比
  • 重传率: 网络重传百分比

查看网络i/o性能的命令

ethtool

用来查询当前网卡的信息,主要用来查看带宽

ethtool xx : 查询xx网卡信息

eg:
[root@localhost ~]# ethtool ens33
Settings for ens33:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Supported FEC modes: Not reported
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: Yes
        Advertised FEC modes: Not reported
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 0
        Transceiver: internal
        Auto-negotiation: on
        MDI-X: off (auto)
        Supports Wake-on: d
        Wake-on: d
        Current message level: 0x00000007 (7)
                               drv probe link
        Link detected: yes

其中Speed参数表示带宽为1000Mb/s

ping

用来查看网络连通性与时延

[root@localhost ~]# ping www.baidu.com
PING www.a.shifen.com (180.101.50.242) 56(84) bytes of data.
64 bytes from 180.101.50.242 (180.101.50.242): icmp_seq=1 ttl=128 time=4.34 ms
64 bytes from 180.101.50.242 (180.101.50.242): icmp_seq=2 ttl=128 time=4.45 ms
64 bytes from 180.101.50.242 (180.101.50.242): icmp_seq=3 ttl=128 time=5.67 ms
^C
--- www.a.shifen.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2005ms
rtt min/avg/max/mdev = 4.347/4.825/5.673/0.601 ms

sar

用来查看网卡(DEV) 的PPS、吞吐量、网络接口使用率

sar -n 关键词 时间间隔 次数
-n根据关键词统计信息:DEV-网卡、EDEV-网卡(错误)
eg:
查看网络接口的io使用情况,每隔5秒检查一次,一共检查2次
sar -n DEV 5 2

参数 含义
IFACE 网卡接口名称
rxpck/s 接收的PPS,单位为包/秒
txpck/s 发送的PPS,单位为包/秒
rxkB/s 接收的吞吐量,单位为KB/秒
txkB/s 发送的吞吐量,单位为KB/秒
rxcmp/s 接收的压缩数据包数,单位为包/秒
txcmp/s 发送的压缩数据包数,单位为包/秒

监控linux系统状态(top)

top命令主要分为六块信息,分别是系统运行状态,进程状态,CPU状态,内存状态,swap交换分区状态,进程信息区

1.系统运行状态

包含当前系统时间,系统运行时间,当前登陆用户数,系统平均负载

系统平均负载:在特定时间间隔内运行队列中的平均进程树(一段时间内,等待cpu处理的进程个数)

load average后面三个参数分别表示为1分钟、5分钟、15分钟的系统平均负载

2.进程状态

包含进程总数,正在运行进程数,睡眠进程数,停止的进程数,僵尸进程数

3.CPU状态

包含用户空间CPU占用百分比,内核空间CPU占用百分比,用户进程空间内改变过优先级的CPU占用百分比,空闲CPU百分比,等待输入输出的CPU时间百分比,硬件中断占用百分比,软中断占用百分比,虚拟机占用百分比

4.内存状态

包含物理内存总量,空闲的物理内存,已使用的物理内存,用作内核缓存的物理内存

5.Swap交换分区状态

包含交换分区总量,空闲的交换分区量,已使用的交换分区量,可用于交换的内存量

6.进程信息区

包含进程ID,进程所有者的用户名,优先级,nice值,进程使用的虚拟内存量,进程使用的虚拟内存,驻留内存大小,共享内存的大小,进程状态,CPU使用百分比,物理内存使用百分比,进程使用的CPU时间总结,命令名/命令行

序号 列名 含义
1 PID 进程id
2 PPID 父进程id
3 RUSER Real user name
4 UID 进程所有者的用户id
5 USER 进程所有者的用户名
6 GROUP 进程所有者的组名
7 TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
8 PR 优先级
9 NI nice值。越小优先级越高,最小-20,最大20(用户设置最大19)
10 P 最后使用的CPU,仅在多CPU环境下有意义
11 %CPU 上次更新到现在的CPU时间占用百分比
12 TIME 进程使用的CPU时间总计,单位秒
13 TIME+ 进程使用的CPU时间总计,单位1/100秒
14 %MEM 进程使用的物理内存百分比
15 VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
16 SWAP 进程使用的虚拟内存中,被换出的大小,单位kb
17 RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
18 CODE 可执行代码占用的物理内存大小,单位kb
19 DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
20 SHR 共享内存大小,单位kb
21 nFLT 页面错误次数
22 nDRT 最后一次写入到现在,被修改过的页面数
23 S 进程状态
D:不可中断的睡眠状态
R:运行
S:睡眠
T:跟踪/停止
Z:僵尸进程
24 COMMAND 命令名/命令行
25 WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
26 Flags 任务标志
top命令格式:
top 选项
-d 指定刷新时间间隔
-p 指定PID,仅监控某个进程的状态
-c 显示整个命令行而不只是命令名
-u 指定用户名的进行信息

eg:
每隔3秒显示pid为38860、38861、38862的进程状态信息并显示进程启动的整个命令行
top -d 3 -p 38860,38861,38862 -c


top的交互操作:
空格/Enter:刷新界面
h/?:显示帮助菜单
f/F:选择显示的列,使用空格或d键来切换是否显示当前列,带*为显示,不带*为不显示。使用s键设置当前列为排序列。设置完毕后按q键退出。
t:切换显示 CPU 统计信息的样式
m:切换显示内存和Swap交换分区统计信息的样式
P:根据 %CPU 排序
M:根据 %MEM 排序
T:根据 TIME+ 排序
e: 切换内存信息显示的单位(KB,MB,GB,TB,PB),默认以KB为单位
1:显示所有 CPU 统计信息
s:更改自动刷新时间,单位为秒
k:终止指定的进程
q:退出界面

磁盘分区相关命令(lsblk、fdisk、mkfs)

lsblk

lsblk(list block):列出所有可用块设备的信息,并显示他们之间的依赖关系,默认是以树状列出所有块设备

[root@localhost ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   20G  0 disk
├─sda1   8:1    0  300M  0 part /boot
├─sda2   8:2    0    2G  0 part [SWAP]
└─sda3   8:3    0 17.7G  0 part /
sr0     11:0    1 1024M  0 rom

NAME:块设备名
MAJ:MIN:主要:次要设备号
RM:显示是否为可移动设备 0:不是 1:是
SIZE:此设备的容量大小信息
RO:此设备是否为只读  0:不是 1:是
TYPE:块设备类型 disk:磁盘 part:分区  rom:只读存储
MOUNTPOINT:此设备的挂载点

fdisk

fdisk:磁盘分区管理工具

显示分区表
[root@localhost ~]# fdisk -l

#显示磁盘大小、字节数、扇区数
Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
#扇区大小(逻辑/物理)
Sector size (logical/physical): 512 bytes / 512 bytes
#I/O大小(最小/最佳)
I/O size (minimum/optimal): 512 bytes / 512 bytes
#磁盘标签类型
Disk label type: dos
#磁盘标识符
Disk identifier: 0x000b489a

# 分区    引导      开始           结束     容量     id   分区类型
  Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      616447      307200   83  Linux
/dev/sda2          616448     4810751     2097152   82  Linux swap / Solaris
/dev/sda3         4810752    41943039    18566144   83  Linux


命令分区
[root@localhost ~]# fdisk /dev/sda
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.


Command (m for help): m
Command action
   a   toggle a bootable flag  #设置可引导标记
   b   edit bsd disklabel  #编辑bsd磁盘标签
   c   toggle the dos compatibility flag  #设置DOS操作系统兼容标记
   d   delete a partition  #删除一个分区
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   l   list known partition types  #显示已经的文件系统类型
   m   print this menu  #显示帮助菜单
   n   add a new partition  #新建分区
   o   create a new empty DOS partition table  #建立空白DOS分区表
   p   print the partition table  #显示分区列表
   q   quit without saving changes  #不保存退出
   s   create a new empty Sun disklabel  #新建空白SUN磁盘标签
   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 (experts only)  #附近功能

通常命令分区去创建一个分区

mkfs

mkfs(make file system):用于在特定的分区上建立linux文件系统

指定分区格式化为ext4格式
有两种写法:
1: mkfs -t ext4 /dev/sda
2: mkfs.ext4 /dev/sda

快速删除大量文件

当用rm -rf 删除一个文件夹中含有百万数量级的小文件以及小文件夹时,会出现删除时间过长以及提示"Argument list too long"(参数列表过长)导致无法用rm删除的情况,通过rsync工具能更高效删除大数据量的文件

删除过程
1.先创建一个空目录,假设空目录为temp 需要删的目录为need_delete
2.执行命令
rsync -a --delete-before temp/ need_delete/
参数说明:
–delete-before 接收者在传输之前进行删除操作
–progress 在传输时显示传输过程
-a 归档模式,表示以递归方式传输文件,并保持所有文件属性
-H 保持硬连接的文件
-v 详细输出模式

fork:Cannot allocate memory的问题定位

场景是我有一次远程ssh登陆服务器发现连不上,但ip可以ping通,通过直连服务器发现是无法创建进程导致,于是有了这次的问题定位

1.首先查看内存,是否是因为内存不够导致的,输入命令
free -h:人性化的方式显示内存信息
发现内存还有3G说明不是内存的原因
2.查看最大进程数与当前进程数,是否是因为进程数慢了导致的
sysctl kernel.pid_max : 查看最大进程数
ps -eLf|wc -l : 查看当前线程数
注:我这边发现是一个服务一个进程创建了过多的线程,超过了线程栈导致的
可以通过ulimit -a查看其大小,默认是8192kb(8Mb)
3.修改最大进程数
echo 100000 >/proc/sys/kernel/pid_max
4.永久生效
echo "kernel.pid_max=100000" >>/etc/sysctl.conf
sysctl -p
posted @ 2021-10-05 11:13  柯南。道尔  阅读(346)  评论(0)    收藏  举报