Linux常用命令
2019-02-21 16:55:57 89 举报
AI智能生成
开发人员Linux常用命令
作者其他创作
大纲/内容
文件操作
操作
pwd
ls
cd
cp
scp
scp local_file remote_username@remote_ip:remote_folder
rm
mv
touch
一是用于把已存在文件的时间标签更新为系统当前的时间(默认方式)
二是用来创建新的空文件
ln
软连接
ln -s 源地址 目的地址
硬连接
ln 源地址 目的地址
文件夹不支持硬连接
查看
cat
连接文件并打印到标准输出设备上
cat -n filename
带上行号打印文件内容
find
用来在指定目录下查找文件
head
tail
tail notes.log
显示文件的最后 10 行
tail -f notes.log
循环读取文件
more
less
文本处理
grep
grep '字符' 文件
egrep
sed
sed '命令' 文件
awk
awk '条件{命令}' 文件
wc
统计指定文件中的字节数、字数、行数
特殊符号命令
# 井号 (comments)
~ 帐户的 home 目录
; 分号 (Command separator)
在 shell 中,担任"连续指令"功能的符号就是"分号"
'string' 单引号 (single quote)
被单引号用括住的内容,将被视为单一字串。在引号内的代表变数的$符号,没有作用,也就是说,他被视为一般符号处理,防止任何变量替换。
"string" 双引号 (double quote)
被双引号用括住的内容,将被视为单一字串。它防止通配符扩展,但允许变量扩展。这点与单引数的处理方式不同。
/ 斜线 (forward slash)
根目录
\ 倒斜线
1. 放在指令前,有取消 aliases的作用;
2. 放在特殊符号前,则该特殊符号的作用消失;
3. 放在指令的最末端,表示指令连接下一行
| 管道 (pipeline)
pipeline 是 UNIX 系统,基础且重要的观念。连结上个指令的标准输出,做为下个指令的标准输入。
: 冒号
在 bash 中,这是一个内建指令:"什么事都不干",但返回状态值 0
$ 钱号(dollar sign)
变量替换(Variable Substitution)的代表符号
在 Regular Expressions 里被定义为 "行" 的最末端 (end-of-line)
${} 变量的正规表达式
${parameter:-word}
${parameter:=word}
${parameter:?word}
${parameter:+word}
${parameter:offset}
${parameter:offset:length}
${!prefix*}
${#parameter}
${parameter#word}
${parameter##word}
${parameter%word}
${parameter%%word}
${parameter/pattern/string}
${parameter//pattern/string}
$*
引用script的执行引用变量,引用参数的算法与一般指令相同,指令本身为0,其后为1,然后依此类推
$? 状态值 (status variable)
UNIX(linux) 系统的进程以执行系统调用exit()来结束的。这个回传值就是status值。回传给父进程,用来检查子进程的执行状态。
$$
代表当前shell 的 PID
输出/输入重导向
>
cmd > file
把cmd命令的输出重定向到文件file中。如果file已经存在,则清空原有文件
>>
cmd >> file
把cmd命令的输出重定向到文件file中,如果file已经存在,则把信息加在原有文件後面
<
cmd < file
使cmd命令从file读入
<<
cmd << text
从命令行读取输入,直到一个与text相同的行结束。
:>
: > filename
把文件"filename"截断为0长度.
如果文件不存在, 那么就创建一个0长度的文件(与'touch'的效果相同)
>&
cmd >&-
关闭标准输出
&>
2&>
2<>>&
>&2
文件描述符
文件描述符 名称 常用缩写 默认值
0 标准输入 stdin 键盘
1 标准输出 stdout 屏幕
2 标准错误输出 stderr 屏幕
0 标准输入 stdin 键盘
1 标准输出 stdout 屏幕
2 标准错误输出 stderr 屏幕
> 等同于 1>
< 等同于 0<
& 后台工作
单一个& 符号,且放在完整指令列的最后端,即表示将该指令列放入后台中工作
系统服务
systemd
参考
CentOS 7 Systemd 入门
Systemd 入门教程:命令篇
Systemd 入门教程:实战篇
Systemd 添加自定义服务(开机自启动)
服务配置
服务配置文件
/usr/lib/systemd/
system型
/usr/lib/systemd/system
比如像mysql这种不用登陆就可以运行的就是system型
user型
/usr/lib/systemd/user
用户登录后才能运行的程序
配置文件格式
参考
文件命名
/etc/systemd/system/<服务名称>.service
[Unit]
启动顺序与依赖关系
启动顺序与依赖关系
Description
服务的简单描述
Documentation
服务文档URL
After
依赖,仅当依赖的服务启动之后再启动自定义的服务单元
network.target remote-fs.target nss-lookup.target
[Service]
启动行为
启动行为
Type
启动类型
simple(默认值)
systemd认为该服务将立即启动。服务进程不会fork。
如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket激活型。
如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket激活型。
forking
后台运行的形式
systemd认为当该服务进程fork,且父进程退出后服务启动成功。
对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。
使用此启动类型应同时指定 PIDFile=,以便systemd能够跟踪服务的主进程。
对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。
使用此启动类型应同时指定 PIDFile=,以便systemd能够跟踪服务的主进程。
oneshot
这一选项适用于只执行一项任务、随后立即退出的服务。
可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。
可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。
notify
与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号。
这一通知的实现由 libsystemd-daemon.so 提供。
这一通知的实现由 libsystemd-daemon.so 提供。
dbus
若以此方式启动,当指定的 BusName 出现在DBus系统总线上时,systemd认为服务就绪。
PIDFile
pid文件路径
/run/nginx.pid
ExecStartPre
启动前要做什么,比如测试配置文件
/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart
启动
/usr/sbin/nginx -c /etc/nginx/nginx.conf
TimeoutStartSec
ExecReload
重载
/bin/kill -s HUP $MAINPID
ExecStop
停止
/bin/kill -s QUIT $MAINPID
PrivateTmp
True表示给服务分配独立的临时空间
[Install]
WantedBy
服务安装的用户模式
multi-user.target
权限
754权限
查看配置项
systemctl show iot-box-agent.service
systemctl show iot-box-agent.service -p TimeoutStartUSec
systemctl show iot-box-agent.service -p TimeoutStopUSec
systemctl show iot-box-agent.service -p TimeoutStartUSec
重新加载服务配置文件
如果该服务不能重启,但又必须使用新的配置,这条命令会很有用。
systemctl reload <service>
重新读取所有服务项
修改、添加、删除服务项之后需要执行以下命令。
systemctl daemon-reload
服务、系统状态的查看
查看开机项
systemctl list-unit-files
旧指令
chkconfig --list
查看系统所有安装的服务项
systemctl list-unit-files --type=service
查看系统所有运行的服务项
systemctl list-units --type=service
查看系统所有开机自启动的服务项
systemctl list-unit-files --type=service | grep enabled
查看服务项的依赖关系
systemctl list-dependencies <服务项名称>
查看系统启动耗时
systemd-analyze
查看各项服务启动耗时
systemd-analyze blame | grep .service
查询服务运行状态
systemctl status <service>
旧指令
service httpd status
systemctl is-active <service>
显示启动失败的服务
systemctl --failed
服务管理
启动服务
systemctl start <service>
旧指令
service httpd start
停止服务
systemctl stop <service>
旧指令
service httpd stop
重启服务
systemctl restart <service>
旧指令
service httpd restart
开机运行服务
systemctl enable <service>
旧指令
chkconfig --level 3 httpd on
取消开机运行
systemctl disable <service>
旧指令
chkconfig --level 3 httpd off
禁用服务
systemctl mask <服务项名称>
启用服务
systemctl unmask <服务项名称>
日志管理
开启日志持久化存储
查看日志
journalctl -f -u iot-box-agent.service
journalctl -xe -u iot-box-agent.service
查看日志当前占用的磁盘空间
journalctl --disk-usage
修改日志最大占用的磁盘空间
服务运行级别
/etc/rc.d/rc[0-6].d
/etc/rc[0-6].d
软连接,为了保持和Unix的兼容性
后台运行进程
nohup command
setsid command
command &
( command &)
disown
screen
定时作业
watchdog
时间配置
查看时间和时区
查看系统时间
date -R
Sat, 15 Feb 2020 10:47:44 +0800
RFC 2822 format
日期相关的文件
/etc/localtime
描述本机时间
硬件时间
查看硬件时间
hwclock
Sat 15 Feb 2020 02:12:15 PM CST -0.121019 seconds
clock --show
Sat 15 Feb 2020 02:11:29 PM CST -0.460284 seconds
将系统时间写入硬件
hwclock -w
查看时间配置
timedatectl status
设置时间格式
ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
将本机时间调整至目标时区的时间格式
设置时区
列出所有时区
timedatectl list-timezones
/usr/share/zoneinfo/Asia/*
这里边放着亚洲主要城市的时间
更改时区
方法1
timedatectl set-timezone Asia/Shanghai
方法2
echo "Asia/Shanghai" > /etc/timezone
方法3
环境变量设置,TZ='Asia/Shanghai'
~/.bash_profile
/etc/profile
网络较时NTP
原理
1. 主机当然需要启动 daemon
2. Client 会向 NTP Server 发送出调校时间的 message
3. NTP Server 会送出目前的标准时间给 Client
4. Client 接收了来自 Server 的时间后,会据以调整自己的时间。
2. Client 会向 NTP Server 发送出调校时间的 message
3. NTP Server 会送出目前的标准时间给 Client
4. Client 接收了来自 Server 的时间后,会据以调整自己的时间。
搭建服务端
1. 安装NTP
yum install -y ntp ntpdate
CentOS/RHEL
apt-get install ntp
Debian/Ubuntu
2. 配置NTP
/etc/ntp.conf
3. 添加防火墙
iptables –A INPUT –p udp –i eth0 –s 10.0.7.0/24 –dport 123 –j ACCEPT
4. 启动ntpd
网络时间服务器
ntp1.aliyun.com
ntp2.aliyun.com
ntp3.aliyun.com
ntp4.aliyun.com
ntp5.aliyun.com
ntp6.aliyun.com
ntp7.aliyun.com
ntp2.aliyun.com
ntp3.aliyun.com
ntp4.aliyun.com
ntp5.aliyun.com
ntp6.aliyun.com
ntp7.aliyun.com
0.cn.pool.ntp.org
1.cn.pool.ntp.org
2.cn.pool.ntp.org
3.cn.pool.ntp.org
1.cn.pool.ntp.org
2.cn.pool.ntp.org
3.cn.pool.ntp.org
配置客户端
安装NTP
yum install -y ntpdate
使用ntpdate同步(手动)
ntpdate cn.pool.ntp.org
自动同步
vi /etc/crontab
00 0 1 * * ntpdate -s cn.pool.ntp.org:;hwclock -w
每月一号同步
* */1 * * * ntpdate -s cn.pool.ntp.org;hwclock -w
每一个小时同步
ntpd同步日志
/var/log/ntpdate.log
审计
last
last reboot
history
添加记录时间
echo 'export HISTTIMEFORMAT="%d/%m/%y %T "' >> ~/.bash_profile
source ~/.bash_profile
Other
watch
su
用于切换当前用户身份到其他用户身份
sudo
用来以其他身份来执行命令,预设的身份为root
source
使Shell读入指定的Shell程序文件并依次执行文件中的所有语句
systcl
用于在内核运行时动态地修改内核的运行参数,可用的内核参数在目录/proc/sys中
ssh
ssh [-l login_name] [-p port] [user@]hostname
tar
压缩tar.gz
tar -zcvf webfile.tar.gz webfile
解压tar.gz
tar -xzvf file.tar.gz
curl
-c
接收cookies
-b
发送cookies
-G
-d
data
-F
form
软件包
软件包组成
二进制程序
/bin
/sbin
/usr/bin
/usr/sbin
/usr/local/bin
/usr/local/sbin
/sbin
/usr/bin
/usr/sbin
/usr/local/bin
/usr/local/sbin
库文件
/lib
/lib64
/usr/lib
/usr/lib64
/usr/local/lib
/usr/local/lib64
/lib64
/usr/lib
/usr/lib64
/usr/local/lib
/usr/local/lib64
配置文件
/etc
帮助文件
/usr/share/man
安装方式
通用二进制编译
网上下载,解压使用
软件包管理器
rpm
deb
软件包前端管理工具
yum
适用于Redhat、CentOS、Suse等平台
主配置文件
/etc/yum.conf
客户端配置文件
/etc/yum.repos.d/
常用命令
缓存
yum makecache
yum clean headers
释放头文件
yum clean packages
清除包文件
yum clean all
清除缓存目录下的软件包及旧的 headers
查询
yum search xxx
查找软件包
yum -C search xxx
本地搜索软件包
yum list
列出所有可安装的软件包
yum list updates
列出所有可更新的软件包
yum list installed
列出所有已安装的软件包
yum list installed |grep jdk
yum list extras
列出所有已安装但不在 Yum Repository 内的软件包
yum info
使用YUM获取软件包信息
包管理
yum install
yum -y install java-11-openjdk-headless.x86_64
yum remove
yum -y remove java-1.8.0-openjdk-headless.x86_64
yum -y update
升级所有包同时也升级软件和系统内核
yum -y upgrade
只升级所有包,不升级软件和系统内核
apt-get
适用于Debian、Ubuntu等平台
源
/etc/apk/repositories
apk
适用 docker alpine linux 平台
参考
alpine包管理工具 --apk
源码包安装
gcc
make
系统日志
/var/log
/var/log/dmesg
核心启动日志
/var/log/messages
系统报错日志
系统启动时的状态信息,运行时的状态信息。
比如某个人的身份切换为 root等
如果服务正在运行,比如 DHCP 服务器,您可以在 messages 文件中观察它的活动。
/var/log/maillog
邮件系统日志
/var/log/xferlog
FTP系统日志
/var/log/secure
安全信息和系统登录与网络连接的信息
/var/log/wtmp
记录所有的登录和退出登录,二进制文件,须用last来读取内容
who -u /var/log/wtmp
/var/log/spooler
News日志
/var/log/rpmpkgs
RPM软件包
/var/log/XFree86.0.log
记录 Xfree86 Xwindows 服务器最后一次执行的结果。
如果进系统图形界面失败就找他。
/var/log/boot.log
引导日志 记录开机启动讯息
dmesg | more
/var/log/cron
cron(定制任务日志)日志
/var/log/lastlog
记录每个用户最后的登录信息
/var/log/btmp
记录错误的登录尝试
/var/log/auth.log
需要身份确认的操作
/var/log/audit/audit.log
/var/log/syslog
/var/run/utmp
记录着现在登录的用户
知识点
什么是虚拟内存(swap交换区)
如何快速释放TCP
禁用OS防火墙
Linux 发行版
Debian
更新方式是APT,软件包管理系统是dpkg
Ubuntu
基于Debian发行版和GNOME桌面环境
Linux Mint
基于Debian和Ubuntu的Linux发行版
目的是为家庭用户和企业提供一个免费的,易用的,舒适而优雅的桌面操作系统
Red Hat Linux
Red Hat Enterprise Linux
RHEL
RHEL
商业应用领域
每五年左右更新一次
每个版本提供7年的支持
CentOS
是RHEL的克隆版
更新方式是yum,软件包管理方式是RPM,默认用户界面是GNOME/KDE
Fedora
个人应用领域
免费使用
主要用于桌面版本,提供了较多新特性的支持
操作系统
查看版本当前操作系统发行信息
cat /etc/centos-release
适用于CentOS
CentOS Linux release 7.2.1511 (Core)
cat /etc/redhat-release
适用于Redhat
CentOS Linux release 7.2.1511 (Core)
cat /etc/issue
适用于所有Linux发行版
Red Hat Enterprise Linux Server release 5.6 (Tikanga)
Kernel \r on an \m
Kernel \r on an \m
lsb_release -a
适用于所有Linux发行版
hostnamectl
Static hostname: jenkins
Pretty hostname: Jenkins
Icon name: computer-vm
Chassis: vm
Machine ID: db1c4ae82c3339f72246f48061105e42
Boot ID: dd0fa6d14a40487caf89396ab9b5008e
Virtualization: kvm
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-862.3.2.el7.x86_64
Architecture: x86-64
Pretty hostname: Jenkins
Icon name: computer-vm
Chassis: vm
Machine ID: db1c4ae82c3339f72246f48061105e42
Boot ID: dd0fa6d14a40487caf89396ab9b5008e
Virtualization: kvm
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-862.3.2.el7.x86_64
Architecture: x86-64
查看当前操作系统内核信息
cat /proc/version
Linux version 2.6.32-696.el6.x86_64 (mockbuild@c1bm.rdu2.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC) ) #1 SMP Tue Mar 21 19:29:05 UTC 2017
uname -a
Linux jenkins 3.10.0-862.3.2.el7.x86_64 #1 SMP Mon May 21 23:36:36 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
Linux Kernel
查看当前Linux版本是多少位
getconf LONG_BIT
64
uname -a
显示x86_64 标识64位 否则就是32位
file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=6129e7403942b90574b8c28439d128ff5515efeb, stripped
file /sbin/init
Shell脚本解释器
类型
sh
Bourne shell
Unix标准shell
bash
Bourne Again shell
Linux标准shell
ash
Almquist shell
轻量级shell,低内存环境
24条内部指令
csh
C shell
52条内部指令
tcsh
ksh
Korn shell
42条内部指令
zsh
Other
查看当前系统支持的shell类型
cat /etc/shells
查看某个用户的Shell类型
cat /etc/passwd | grep ^root
查看正在运行shell的类型
echo $0
echo $$
ps -p {pid}
系统信息
/proc
/proc/cpuinfo
CPU的类型和速度
/proc/stat
Linux平台Cpu使用率的计算
/proc/meminfo
内存
/proc/diskstats
磁盘
/proc/devices
设备
环境变量
系统环境变量
/etc/profile
用户环境变量
~/.bash_profile
进程
ps
ps -ef
显示所有进程信息,连同命令行
ps -ef | grep java
ps -T -p {pid}
查看指定进程的子进程或线程
ps -e| awk '{count[$4]++;} END {for(i in count) {print count[i] "\t" i}}'| sort -r
按进程名称,统计个数
ps -u root
显示指定用户进程
ps -l
将目前属于您自己这次登入的 PID 与相关信息列示出来
ps -aux
列出目前所有的正在内存当中的程序
ps -aux --sort -pcpu | less
根据 CPU 使用来升序排序
ps -aux --sort -pcpu,+pmem | head -n 10
ps -aux --sort -pmem,-pcpu | head -n 10
ps -aux --sort -pmem | head -n 10
ps -eo pid,user,args
查看现在有谁登入了你的服务器
watch -n 1 'ps -aux --sort -pmem,-pcpu | head -n 20'
使用PS实时监控进程状态
pstree
系统支持的最大线程数
cat /proc/sys/kernel/pid_max
内核所能使用的最大线程数
cat /proc/sys/kernel/threads-max
系统限制某用户下最多使用的线程或进程数
ulimit -a|grep processes
单个进程可创建的线程数
cat /proc/sys/vm/max_map_count
系统已经使用进程或线程数
pstree -p | wc -l
查询当前某程序的线程或进程数
pstree -p 3660 | wc -l
pstree -p `ps -e | grep java | awk '{print $1}'` | wc -l
查看一个进程启动的线程数
ps -mp <PID>
CPU
查看cpu相关信息,包括型号、主频、内核信息等
cat /proc/cpuinfo
top
Process info
PID
进程id
USER
进程所有者的用户名
PR
优先级
NI
nice值。负值表示高优先级,正值表示低优先级
VIRT
进程使用的虚拟内存总量,单位KB。VIRT=SWAP+RES
RES
进程使用的、未被换出的物理内存大小,单位KB。RES=CODE+DATA
SHR
共享内存大小,单位kb
S
进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
%CPU
上次更新到现在的CPU时间占用百分比
%MEM
进程使用的物理内存百分比
TIME+
进程使用的CPU时间总计,单位1/100秒
COMMAND
命令名/命令行
vmstat 5 5
vmstat [-V] [-n] [delay [count]]
输出分析
procs
r
等表示运行和等待CPU时间片的进程数
如果这个值长期大于系统CPU个数,就说明CPU资源不足,可以考虑增加CPU;
b
处表示在等待资源的进程数,比如正在等待I/O或者内存交换等
memoy
swpd
虚拟内存使用情况,单位:KB,表示切换到内存交换区的内存大小,
如果swap值不为0或者比较大,只要si、so的值长期为0,这种情况一般属于正常情况。
free
空闲的物理内存,单位KB
buff
用作缓存的内存大小,单位KB(将要写入磁盘的),表示buffers cached内存大小,也就是缓冲大小,一般对块设备的读写才需要缓冲。
cache
用作缓存的内存大小,单位KB(从磁盘中读出来的)。表示page cached的内存大小,也就是缓冲大小,一般作为文件系统进行缓冲,频繁访问的文件都会被缓存
如果cache值非常大说明缓存文件比较多,如果此时io中的bi比较小,说明文件系统效率比较好。
swap
si
从磁盘交换到内存的交换页数量,单位:KB/S(每秒从交换区写到内存的大小);表示从磁盘调入内存,也就是内存进入内存交换区的内存大小;
so
从内存交换到磁盘的交换页数量,单位:KB/S(每秒写入交换区的内存大小),也就是由内存交换区进入内存的内存大小;
一般情况下,si、so的值都为0,如果si、so的值长期不为0,则说明系统内存不足,需要增加系统内存;
io
bi
由块设备读入数据的总量,即读磁盘,单位kb/s
bo
写到块设备数据的总量,即写磁盘,单位kb/s
如果bi+bo值过大(超过1000算大),且wa值较大,则表示系统磁盘IO瓶颈
system
in
表示某一时间间隔内观测到的每秒设备的中断数,包括时钟中断
cs
每秒产生的上下文切换次数
这2个值越大,则由内核消耗的CPU就越多。
cpu
us
用户进程消耗的CPU时间百分比
us值越高,说明用户进程消耗cpu时间越多,如果长期大于50%,则需要考虑优化程序或算法。
sy
表示系统内核进程消耗的CPU时间百分比
一般来说us+sy应该小于80%,如果大于80%,说明可能出现CPU瓶颈
id
空闲状态的时间百分比(包括IO等待时间)
wa
表示IO等待所占用的CPU时间百分比
wa值越高,说明IO等待越严重
如果wa值超过20%,说明IO等待严重
引起I/O等待的原因可能是磁盘大量随机读写造成的,也可能是磁盘或者磁盘访问监控器的带宽瓶颈(主要是块操作)造成的
iostat -c 1 10
内存
free
字段描述
Mem
物理内存
物理内存
total
系统可用内存总量
数量上等于系统物理内存减去内核保留的内存
used
总计分配给缓存(包含buffers 与cache )使用的数量
used = total - free - buffers - cache
free
未被分配的内存
shared
多个进程共享的内存总额
buff/cache
系统分配但未被使用的buffers/cache
buffers
缓冲内存
给磁盘写入数据加速的
cache
缓存内存
给磁盘读取数据时加速的
avaliable
还可以被应用程序使用的物理内存大小
available 小于 free + buffer + cache
Swap
虚拟内存
虚拟内存
totoal
虚拟内存交换空间总量
used
交换区使用量
free
有多少空闲的交换区
空闲内存=free+buffers+cached=total-used
free -h
ll -h /proc/kcore
内存镜像
cat /proc/meminfo
ps -orss --no-headers --pid {pid}
查看指定进程的物理内存使用量,单位KB
文件描述符
lsof
用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)
yum install lsof
lsof
lsof -n
COMMAND
PID
TID
USER
FD
TYPE
DEVICE
SIZE/OFF
NODE
NAME
线程ID
lsof -p
系统级别
统计系统打开句柄数
lsof -n | wc -l
用户级别
进程级别
统计各命令打开句柄数
lsof -n|awk '{print $1}'|sort|uniq -c|sort -nr
统计各进程打开句柄数
lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr
统计各用户打开句柄数
lsof -n|awk '{print $4}'|sort|uniq -c|sort -nr
查看所有java进程打开句柄数
lsof -p $(ps -ef |grep java |awk '{print $2}'| tr '\012' ,) |wc -l
显示与指定目录交互的进程
lsof /var/log/messages/
查看指定进程打开的文件描述符
lsof -p {pid}
lsof -p {pid} | wc -l
lsof -n {pid}
lsof -n {pid} | wc -l
最大文件描述符限制
系统级限制
查看方式
sysctl -a | grep fs.file-max
cat /proc/sys/fs/file-max
查看系统最大描述符
/etc/sysctl.conf
fs.file-max = 512000
echo “fs.file-max=1610270” >> /etc/sysctl.conf
sysctl -p
立即生效
用户级限制
查看方式
ulimit -n
修改用户最大文件描述
echo “* hard nofile 65536” >> /etc/security/limits.conf
echo “* soft nofile 65536” >> /etc/security/limits.conf
echo “* soft nofile 65536” >> /etc/security/limits.conf
代表所有用户,支持具体用户(优先级高,不受影响)。文件修改即生效,退出
或打开新终端执行ulimit -n即看到修改效果
或打开新终端执行ulimit -n即看到修改效果
进程级限制
查看方式
cat /proc/${PID}/limits | grep "Max open files"
进程最大描述符受限与系统/用户级,以及进程本身相关代码程序限制
Other
对于文件描述符增加的比例,资料推荐是以2的幂次为参考
磁盘
df -h
磁盘使用情况
文件系统 容量 已用 可用 已用% 挂载点
du
du -h --max-depth=1
当前的文件夹下的磁盘使用情况
du -sh
指定目录磁盘使用情况
du -h --max-depth=0
du -sh ./*
du -sh -m <path>
fdisk
查看当前分区
fdisk -l
逻辑卷管理器(LVM)
物理存储介质
指系统的物理存储设备
/dev/sda
/dev/hda
磁盘分区
计算机中存放信息的主要的存储设备就是硬盘,但是硬盘不能直接使用,必须对硬盘进行分割,分割成的一块一块的硬盘区域就是磁盘分区。
硬盘分为两大类分区:主分区和扩展分区
主分区是能够安装操作系统,能够进行计算机启动的分区,这样的分区可以直接格式化,然后安装系统,直接存放文件。
物理卷(PV)
物理卷可以是一个磁盘,也可以是磁盘中的一个分区。它为LVM提供了存储介质。
物理盘区(PE)
卷组(VG)
由一个或多个物理卷所组成的存储池,在卷组上能创建一个或多个逻辑卷。
逻辑卷(LV)
类似于非LVM系统中的硬盘分区,它建立在卷组之上,是一个标准的块设备,在逻辑卷之上可以建立文件系统
逻辑盘区(LE)
格式化逻辑卷
mke2fs
挂载逻辑卷
mount
卸载逻辑卷
umonut
硬盘分类
IDE硬盘
hd
hd{硬盘顺序号a-z}{分区序号1-n}
SCSI硬盘
sd
SATA硬盘
sd
虚拟硬盘
vd
磁盘IO
iostat
yum -y install sysstat
iostat [ -c | -d ] [ -k | -m ] [ -t ] [ -V ] [ -x ][ device [...] | ALL ] [ -p [ device | ALL ] ] [ interval [ count ]]
iostat -d -k 1 10
查看TPS和吞吐量信息
Device
tps
每秒I/O数(即IOPS。磁盘连续读和连续写之和)
Blk_read/s
每秒读取的 block 数
Blk_wrtn/s
每秒写入的 block 数
Blk_read
读入的 block 总数
Blk_wrtn
写入的 block 总数
iostat -d -x -k 1 10
查看设备使用率(%util)、响应时间(await)
Device
rrqm/s
每秒合并到设备的读取请求数
wrqm/s
每秒合并到设备的写请求数
r/s
每秒向磁盘发起的读操作数
w/s
每秒向磁盘发起的写操作数
rkB/s
每秒从设备读入的数据量,单位为 K。
wkB/s
每秒向设备写入的数据量,单位为 K。
avgrq-sz
发送到设备的请求的平均大小,单位是 扇区。
平均每次设备I/O操作的数据大小
avgqu-sz
发送到设备的请求的平均队列长度。
如果I/O请求压力持续超出磁盘处理能力,该值将增加
如果单块磁盘的队列长度持续超过2,一般认为该磁盘存在I/O性能问题。
需要注意的是,如果该磁盘为磁盘阵列虚拟的逻辑驱动器,需要再将该值除以组成这个逻辑驱动器的实际物理磁盘数目,以获得平均单块硬盘的I/O等待队列长度
await
I/O 请求平均执行时间,包括发送请求和执行的时间。单位是 毫秒。
一般地,系统I/O响应时间应该低于5ms,如果大于 10ms就比较大了
r_await
每个读操作平均所需的时间
不仅包括硬盘设备读操作的时间,还包括了在kernel队列中等待的时间
w_await
每个写操作平均所需的时间
不仅包括硬盘设备写操作的时间,还包括了在kernel队列中等待的时间
svctm
发送到设备的 I/O 请求的平均执行时间。单位是 毫秒。
平均每次设备I/O操作的服务时间 (毫秒)(这个数据不可信!)
%util
一秒中有百分之多少的时间用于I/O操作,即被IO消耗的CPU百分比
用于显示设备的带宽利用率
一般地,如果该参数是100%表示设备已经接近满负荷运行了
iostat -c 1 10
查看cpu状态
avg-cpu
%user
CPU处在用户模式下的时间百分比
%nice
CPU处在带NICE值的用户模式下的时间百分比
%system
CPU处在系统模式下的时间百分比
%iowait
CPU等待输入输出完成时间的百分比
如果该值较高,表示磁盘存在I/O瓶颈
%steal
管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比
%idle
CPU 空闲时间的百分比。
iotop
yum install iotop
iotop -o
vmstat 2 5
网络
ifconfig
查看网卡和IP
ip link
查看网卡状态
ping
利用ICMP协议,检查网络是否联通
网络层
telnet
检查TCP端口是否联通
传输层
lsof -i
select IPv[46] files
lsof -i 6
IPV6 流量
lsof -iTCP
TCP 连接
lsof -i :80
指定端口连接
lsof -i tcp:8080
查看指定端口的进程
lsof -i -sTCP:LISTEN
监听的端口
lsof -i -sTCP:ESTABLISHED
已建立的TCP连接
netstat
功能参数
netstat -a
display all sockets (default: connected)
netstat -at
只列出 TCP 协议的连接
netstat -l
display listening server sockets
netstat -i
辅助参数
netstat -n
禁用反向域名解析,加快查询速度
netstat -p
display PID/Program name for sockets
netstat -e
display other/more information
场景
查看核心路由
netstat -rn
查看所有 TCP 端口
netstat -at
查看所有监听 TCP 端口
netstat -lt
查看 TCP 端口统计信息
netstat -st
TCP连接的状态统计
netstat -ant|awk '/^tcp/ {++S[$NF]} END {for(a in S) print (a,S[a])}'
显示网络接口列表
netstat -i
查找端口占用
netstat –anp | grep 6379
查看所有进程的TCP连接数,按进程排序
netstat -anpt | sort -k7,7 -k 6,6
字段介绍
netstat -anp
Proto
TCP
UDP
Recv-Q
网络接收队列
表示收到的数据已经在本地接收缓冲,但是还有多少没有被进程取走
这两个值通常应该为0,如果不为0可能是有问题的。
packets在两个队列里都不应该有堆积状态。
可接受短暂的非0情况。
如果接收队列Recv-Q一直处于阻塞状态,可能是遭受了拒绝服务 denial-of-service 攻击。
Send-Q
网络发送队列
表示对方没有收到的,或者说没有Ack的数据,还是本地缓冲区.
如果发送队列Send-Q不能很快的清零,可能是有应用向外发送数据包过快,或者是对方接收数据包不够快。
Local Address
Foreign Address
State
PID/Program name
traceroute
利用ICMP 协议定位您的计算机和目标计算机之间的所有路由器
网络层
网络抓包
tcpdump
监视所有来自或去往IP的包
tcpdump host 10.10.10.1
网络流量
nethogs
nethogs eth0 eth1
nload
nc
TCP端口扫描
nc -v -z -w2 192.168.0.3 1-100
扫描UDP端口
nc -u -z -w2 192.168.0.1 1-1000
扫描192.168.0.3 的端口 范围是 1-1000
扫描指定端口
nc -nvv 192.168.0.1 80
扫描 80端口
iptables
查看已添加的iptables规则
iptables -L -n -v
DNS
查看DNS
cat /etc/resolv.conf
dig
查询DNS相关信息记录
nslookup
DNS解析是否正常
网关配置
路由配置
route -n
双网卡配置
0 条评论
下一页