Полный набор необходимых команд Linux для разработки

Java Linux
Полный набор необходимых команд Linux для разработки

Наши сервисы, как правило, работают в Linux-системах, поэтому необходимо кое-что знать о командах Linux. Далее мы подробно представим некоторые часто используемые команды Linux одну за другой.

  • файловые операции
  • Удаленный вход и работа
  • дисковое крепление
  • Управление процессом Начало и конец
  • Просмотр параметров производительности системы
  • парсинг веб-страниц
  • команды сценария оболочки
  • Общие команды JVM

Следите за официальной учетной записью, общайтесь друг с другом и ищите в WeChat: Sneak forward

1 Команды работы с файлами

find

  • find используется для поиска файлов или подкаталогов в указанном каталоге.Если каталог поиска не указан, он будет искать в текущем каталоге
  • Формат команды:·find path -option [-print] [ -exec/-ok command {} \ ] ;
    • print: вывод соответствующих файлов на стандартный вывод
    • exec: выполнить команду command для совпадающего файла в качестве аргумента. {} является заполнителем для сопоставления файлов
    • ok: имеет тот же эффект, что и exec, но перед выполнением команды будет выдано приглашение, позволяющее пользователю определить, выполнять ли
常用的option 选项 | 描述
-mount     | 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
-amin n    | 在过去 n 分钟内被读取过
-atime n   | 在过去 n 天内被读取过的文件
-cmin n    | 在过去 n 分钟内被修改过
-ctime n   | 在过去n天内被修改过的文件
-gid n     | gid 是 n 文件。或 -group name, group 名称是 name 的文件
-pid n     | pid 是 n 的文件
-ipath p   | 路径名称符合 p 的文件。或 -path p,ipath 会忽略大小写
-name name | 文件名称符合 name 的文件。或者-iname name,iname 会忽略大小写
-size n    | 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组
-type c    | 文件类型是c的文件。 d: 目录;f: 一般文件;l: 符号连结;s: socket
  • найти пример
~~ 查找 /var/log 目录中更改时间在 7 日以前的普通文件,并在删除之前询问它们
# find /var/log -type f -mtime +7 -ok rm {} \;

сенсорный и vim

  • touchМожет использоваться для создания пустого файла, если файл существует, это изменит время доступа и время модификации файла.
  • сенсорный пример
~~ #创建一个名为“file”的新的空白文件,如果存在则会修改其时间属性
# touch file             
  • vimVim — это текстовый редактор, разработанный на основе vi, который является предпочтительным инструментом для просмотра файлов и написания текста в интерактивном интерфейсе системы Linux.

image.png

  • vim разделен на три режима, а именно командный режим (командный режим), режим ввода (режим вставки) и командный режим нижней строки (режим последней строки).
1 命令模式:用户 vim fileName,便进入了命令模式
    i         切换到输入模式,以输入字符
    :         冒号切换到底线命令模式
    /word     向光标之下寻找一个名称为 word 的字符串
    ?word     向光标之上寻找一个字符串名称为 word 的字符串
    n         重复前一个搜索(与 / 或 ? 有关)
    N         反向重复前一个搜索(与 / 或 ? 有关)
    PageUp    上翻页
    PageDown  下翻页
    G	      移动到这个档案的最后一行(常用)
    nG	      n 为数字。移动到这个档案的第 n 行
    
2 输入模式: 在命令模式下按下i就进入了输入模式; ESC 退出输入模式,切换到命令模式
    字符按键、shift组合    输入字符
    ENTER                 回车键,换行
    BACK SPACE            退格键,删除光标前一个字符
    DEL                   删除键,删除光标后一个字符
    方向键                在文本中移动光标
    HOME/END              移动光标到行首/行尾
    Page Up/Page Down     上/下翻页
    Insert                切换光标为输入/替换模式,光标将变成竖线/下划线

3 底线命令模式: 在命令模式下按下 ":" 就进入了底线命令模式; ESC退出模式,切换到命令模式
    :q                 退出 vim 程序
    :w                 保存文件
    :wq                保存后离开
    :!q                不保存退出
    :w [filename]      将编辑的数据储存成另一个档案
    :r [filename]      在编辑的数据中,读入另一个档案的数据。追加到游标所在行后面
    :!ShellCommand     暂时离开 vi 到指令行模式下执行 shellCommand 的显示结果
    :%s/word1/word2/g  从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 
    :%s/word1/word2/gc 和 %s/word1/word2/g 功能一致,不过每次替换都需用户确认  

меньше, кошка, больше, хвост и голова

  • lessЭто незаменимый инструмент для просмотра файлов для Linux с чрезвычайно мощными функциями.
less [option] 文件
option 常用参数
-f 强制打开文件,二进制文件显示时,不提示警告;
-i 搜索时忽略大小写;除非搜索串中包含大写字母;
-I 搜索时忽略大小写,除非搜索串中包含小写字母;
-m 显示读取文件的百分比;
-M 显法读取文件的百分比、行号及总行数;
-N 在每行前输出行号;
-p pattern 搜索 pattern;比如在/etc/profile搜索单词MAIL,就用 less -p MAIL /etc/profile
-s 把连续多个空白行作为一个空白行显示;
  • Действия, которые можно выполнить после файла less, аналогичны операциям vim в командном режиме; общие команды действия less при просмотре текста следующие
Enter      向下移动一行
y          向上移动一行
Space      向下滚动一屏
b          向上滚动一屏
d          向下滚动半屏
u          向上滚动半屏
g          跳到第一行
G          跳到最后一行
/pattern   向下搜索pattern ,比如 /MAIL 表示在文件中搜索MAIL单词
?pattern   向上搜索pattern 
n          重复前一个搜索(与 / 有关)
N          反向重复前一个搜索(与 / 有关)
v          调用 vi 编辑器
q          退出 less
!command   调用 shell 命令;比如 !ls 显示当前目录下的所有文件
  • moreОн часто используется для отображения выходного содержимого, а затем разбиения на страницы в соответствии с размером окна, а затем также может запрашивать процент файла. Формат команды:more 文件, более общие инструкции по эксплуатации следующие
Enter        向下n行,需要定义,默认为1行;
Ctrl+f       向下滚动一屏
空格键        向下滚动一屏
Ctrl+b       返回上一屏
=            输出当前行的行号
:f           输出文件名和当前行的行号
v            当我们查看某一文件时,想调用vi来编辑它,用 v 动作指令
!command     调用 shell,并执行command命令
q            退出 more
  • catОбычно используется для объединения файлов и печати в стандартный вывод, а также для просмотра файлов. Формат:cat fileName [| command ] , команда по умолчанию эхо, кошка будет отображать содержимое всего файла за один раз, без подкачки
  • headзаключается в отображении первых нескольких строк содержимого файла; распространенные форматы команд:head -n 行数值 文件名
  • tailсколько строк после отображения содержимого файла; распространенные форматы команд:tail -n 行数值 文件名

грэп, згреп

  • grep обычно используется для поиска и сопоставления каждой строки данных в файле, соответствующей шаблону. формат командыgrep [options] 'pattern' [files];grep поддерживает обработку выходных данных конвейера; шаблон поддерживает регулярные выражения; файлы могут состоять из нескольких файлов, разделенных пробелами
  • grep не может соответствовать номеру поиска в сжатом файле.В это время вы можете использовать zgrep, zgrep подходит для обработки сжатых файлов gz и других форматов
options选项 | 功能描述
-i	|	忽略大小写
-v	|	不匹配匹配的
-l	|	输出匹配的文件名
-L	|	输出不匹配的文件名
-c	|	输出匹配的数目(行数)
-C num  |       输出匹配的前后 num 条行数
-n	|	输出匹配行的同时在前面加上文件名及在文件名中的行数
  • примеры grep и zgrep
~~ 输出匹配 lwl 数据,及前后十行
# grep -C 10 'lwl' log.txt 

cp

  • Копирование каталога файлов доступно с помощью команды cp. формат КП:cp [选项参数] fileSource... fileTarget
cp 选项参数 | 描述
-a | 此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容
-r | 若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件
-f | 覆盖已经存在的目标文件而不给出提示。
-i | 与 -f 选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答 y 时目标文件将被覆盖
-l | 不复制文件,只是生成链接文件
  • пример КП
~~ 将当前目录 csc/ 下的所有文件复制到新目录 lwl 下
# cp –r csc/ lwl 

mv

  • mv можно использовать для перемещения папок, файлов или изменения имен файлов и имен каталогов.
option 参数 | 描述
-b | 当目标文件存在时,先进行备份再覆盖
-f | 当目标文件存在时,强制覆盖
-i | 默认选项,当目标文件存在时,提示是否覆盖
-t | 先指定目标,再指定源目标。即目标 和 源目标 参数位置互换
  • пример мв
~~ 把 csc.txt 修改名字为 lwl.txt
# mv csc.txt lwl.txt
~~ 将 csc 目录下的文件移到 lwl 下
# mv csc/ lwl 

rm

  • Команда rm используется для удаления файла или каталога; формат командыrm [options] fileName/filePath
option参数 | 描述
-i | 删除前逐一询问确认
-f | 即使原档案属性设置为只读,也可强制删除,无需确认
-r | 将目录及以下之档案亦逐一删除
  • пример
~~ 删除文件名 test.txt
# rm  -rf   test.txt

mdkir

  • Команда mdkir используется для создания каталога,mkdir [-p] dirName; -p Убедитесь, что имя каталога существует, если его нет, создайте его

смола и банка

  • формат команды tar:tar [-option] fileName/filePath;tar имеет функцию упаковки и сжатия.Обычные файлы и папки можно запаковать в xxx.tar.Если вы хотите сжать, он будет сжат после упаковки.Формат xxx.tar.gz
tar [-cxtzjvfpPN] 文件与目录
常用参数:描述
-c :建立一个压缩文件 
-x :解开一个压缩文件
-t :查看tarfile 里面的文件!特别注意,c/x/t 仅能存在一个,不可同时存在
-z :用 gzip 解压缩
-j :用 bzip2 解压缩
-v :压缩的过程中显示文件,这个常用,但不建议用
-f :使用档名,在 f 之后要立即接档名!例如使用『 tar -zcfv tfile sfile』就是错误的写法,要写成 『tar -zcvf tfile sfile』才对喔
-p :使用原文件的原来属性(属性不会依据使用者而变)
-P :(大写P)使用绝对路径来压缩
-r : 新增文件到已存在的备份文件的结尾部分
-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中
--exclude file :在压缩的过程中,不要将 FILE 打包
  • пример смолы
~~ 打包不压缩:/home/lwl 目录
# tar -cvf lwl.tar /home/lwl
~~ 打包并压缩:/home/lwl 目录
# tar zcvf lwl.tar.gz /home/lwl
~~ 解压 lwl.tar.gz
# tar zxvf lwl.tar.gz

~~ 压缩 lwl.java 为 bz2 格式
# tar jcvf lwl.tar.bz2 lwl.java
~~ 解压 lwl.tar.bz2
# tar jxvf lwl.tar.bz2

~~ 解压部分文件 log2021.log
# tar -zxvf log.tar.gz log2021.log
  • формат команды jar:jar {c t x u f }[ v m e 0 M i ][-C 目录] fileName; Должен быть выбран один из четырех вариантов {ctxu}. [ v f m e 0 M i ] не является обязательным, требуется имя файла
jar {c t x u f }[ v m e 0 M i ][-C 目录] fileName 
jar 的选项参数和 tar 差不多,如下

-c :创建一个jar包
-t :显示jar中的内容列表
-x :解压jar包
-u :添加文件到jar包中
-f :指定jar包的文件名
-v :生成详细的报造,并输出至标准设备
-m :指定manifest.mf文件.(manifest.mf 文件中可以对jar包及其中的内容作一些一设置)
-0 :产生jar包时不对其中的内容进行压缩处理
-M :不产生所有文件的清单文件(Manifest.mf)。这个参数会忽略掉 -m 参数的设置
-i :为指定的jar文件创建索引文件
-C :表示转到相应的目录下执行jar命令,相当于cd到那个目录,然后不带-C执行jar命令
  • пример банки
~~ 利用hello目录创建 hello.jar 包,并显示创建过程
# jar cvf hello.jar hello
~~ 往 jar 包添加文件,将 HelloWorld.java 添加到 hello.jar 包中
# jar uf hello.jar HelloWorld.java    
~~  解压 hello.jar 至当前目录
# jar xvf hello.jar  

chmod

  • chmod — это команда для управления правами пользователя на файлы, формат команды:chmod [-cfvR] mode file

1626575501(1).jpg

## -cfvR 参数解析
-c : 若该文件权限确实已经更改,才显示其更改动作
-f : 若该文件权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)

## mode [ugoa][+-=][rwxX-] 参数解析
u 表示该文件的拥有者
g 表示与该文件的拥有者属于同一个群体(group)者
o 表示其他以外的人
a 包扣 u g o
## [+-=]
+ 表示增加权限
- 表示取消权限
= 表示唯一设定权限
## [rwxX-]
r 表示可读取
w 表示可写入
x 表示可执行
X 只有当文件为目录文件,或者其他类型的用户有可执行权限时,才将文件权限设置可执行
- 不具任何权限
  • пример chmod
# chmod ugo+r lwl.txt
# chmod ug+w,o-w csc.txt lwl.txt

ln

  • Формат команды:ln [options] [源文件或目录] [目标文件或目录]; Когда нам нужно использовать один и тот же файл в разных каталогах и мы не хотим тратить место на копирование одного и того же файла, мы можем использовать ln, чтобы связать его, что эквивалентно созданию ярлыка.
options 参数 | 描述
-b | 删除,覆盖以前建立的链接
-d | 允许超级用户制作目录的硬链接
-f | 强制执行
-i | 交互模式,文件存在则提示用户是否覆盖
-n | 把符号链接视为一般目录
-s | 软链接(符号链接)
  • Мягкая ссылка: существует в виде пути. Подобно ярлыкам в операционной системе Windows; может связывать имя несуществующего файла; может связывать каталоги; программные ссылки могут пересекать файловые системы, а жесткие ссылки не могут
  • Жесткая ссылка: существует как копия файла. но не занимает реального места; жесткие ссылки на каталоги не допускаются; жесткие ссылки могут создаваться только в пределах одной и той же файловой системы
  • В примере
~~ 给文件创建软链接,log2021.log文件创建软链接log2021,如果log2021.log丢失,log2021将失效
# ln -s log2021.log link2021

2 Удаленный вход и работа

ssh

  • Служба ssh под linux — это процесс-демон (демон).Имя процесса ssh-сервера — sshd, который отвечает за мониторинг запроса клиента (по умолчанию 22 порт) в режиме реального времени, включая обмен публичными ключами и прочей информацией. Клиент ssh может быть подключен с помощью таких инструментов, как xShell, Securecrt, Mobaxterm и т. д., или сервер ssh может быть подключен с помощью команды ssh в командном окне linux.
  • Формат команды:ssh [-p port] user@remoteIpилиssh [-p port] user@remoteIp shellCommand ; запросит пароль
  • пример ssh
~~ 登录 192.168.25.137 ,并执行 ls /backup/data
# ssh root@192.168.25.137 ls /backup/data

sftp

  • войти на sftp-серверsftp -oPort=23 user@remoteIp
~~ 上传,第一个目录是本机的, 第二个参数远端的    
> put /etc/hosts /home/lwl   
~~ 下载,第一个目录是远端的, 第二个参数是本机的
> get /home/lwl /home/csc  

scp

  • Если это связано с копированием файлов между разными системами Linux, используйте scp, формат:scp [options] fileSource fileTarget
options 选项参数 | 描述

-P | port:注意是大写的P, port是指定数据传输用到的端口号
-p | 保留原文件的修改时间,小写p,访问时间和访问权限
-r | 递归复制整个目录
-C | 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
  • пример scp
~~ 从本地复制到远程 
~~ A 格式: scp localFile username@remoteIp:filePath; B 格式:scp localFile remoteIp:filePath 
~~ A 命令指定了用户名,但命令执行后需要输入密码,B 格式则需要输入用户名和密码
# scp -r /home/lwl/ root@www.csc.com:/home/lwl/ 

~~ 从远程复制到本地 
~~ 格式:scp remoteIp:filePath localFile
# scp -r www.csc.com:/home/lwl/ /home/lwl/

синхронизация файлов rsync

  • В отличие от других инструментов передачи файлов, таких как FTP или scp, он работает аналогично scp. Самая большая особенность rsync заключается в том, что он проверяет существующие файлы отправителя и получателя.
# rsync -r source destination

Linux и клиентские команды загрузки и выгрузки: rz, sz

  • При использовании ssh для управления Linux-сервером часто необходимо обмениваться файлами между удаленным и локальным сервером. Несомненно, наиболее удобно напрямую использовать функцию загрузки и выгрузки, которая поставляется с SecureCRT. загрузить: rz, скачать: sz
  • Используйте программное обеспечение SecureCRT, XShell в Windows, загружайте и скачивайте с помощью rz, sz
~~ 上传文件到linux;弹出SecureCRT上传窗口,用SecureCRT来上传
# rz    
~~ 下载文件到客户端(window)
# sz filename

крепление на 3 диска

df

  • df используется для просмотра использования дискового пространства:df [-options] [file]
options 参数解释

-i                   显示inode信息
-h                   方便阅读方式显示
-k                   区块为1024字节
-m                   区块为1048576字节
-a                   全部文件系统列表
-T                   显示文件系统类型
-t<文件系统类型>      只显示选定文件系统的磁盘信息
-x<文件系统类型>      不显示选定文件系统的磁盘信息
  • пример df
# df -hT
文件系统          类型            容量  已用  可用 已用% 挂载点
devtmpfs          devtmpfs         63G     0   63G    0% /dev
tmpfs             tmpfs            63G     0   63G    0% /dev/shm
tmpfs             tmpfs            63G  4.1G   59G    7% /run
tmpfs             tmpfs            63G     0   63G    0% /sys/fs/cgroup

mount

  • Команда mount — это часто используемая команда, которая используется для монтирования файлов вне системы Linux.
命令格式:mount [-t vfstype] [-o options] device dir
1、-t vfstype 指定文件系统的类型,通常不必指定,mount 会自动选择正确的类型
iso9660 : 光盘或光盘镜像 
msdos   : DOS fat16文件系统 
vfat    : Windows 9x fat32文件系统
ntfs    : Windows NT ntfs文件系统
smbfs   : Mount Windows文件网络共享
nfs     :UNIX(LINUX) 文件网络共享

2、-o options 主要用来描述设备或档案的挂接方式
loop      :用来把一个文件当成硬盘分区挂接上系统 
ro        :采用只读方式挂接设备 
rw        :采用读写方式挂接设备 
iocharset :指定访问文件系统所用字符集

3、device 要挂接(mount)的设备

4、dir设备在系统上的挂接点(mount point)
  • пример монтирования
~~ 1 挂接U盘,/dev/sdd1 是 U 盘里的磁盘分区
# mount -t vfat -o iocharset=cp936 /dev/sdd1 /mnt/usb

~~ 2 挂接Windows文件共享
~~ administrator 和 pldy123 是ip地址为10.140.133.23 windows计算机的一个用户名和密码,c$是这台计算机的一个磁盘共享
# mount -t smbfs -o username=administrator,password=pldy123 //10.140.133.23/c$ /mnt/samba

~~ 3 linux 挂接(mount)其他linux系统 NFS 共享 
/export/home/sunky 10.140.133.23(rw)  ~~ 在服务端 /etc/exports文件配置共享目录
~~ 在服务端启动 nfs 服务
/etc/rc.d/init.d/nfs start 启动NFS服务 
/etc/rc.d/init.d/nfs stop 停止NFS服务
~~ linux 客户端挂接 NFS 共享
# mount -t nfs -o rw 10.140.133.9:/export/home/sunky /mnt/nfs

4 Управление процессом Начало и конец

systemctl и сервис

  • serviceСама команда представляет собой сценарий оболочки, она найдет указанный сценарий службы в каталоге /etc/init.d/, а затем вызовет сценарий службы для выполнения задачи; команда службы используется для управления системными службами, такими как запуск (старт), стоп (стоп), рестарт (перезагрузка), просмотр состояния (статус) и т. д. Формат команды:service 服务名 [start|stop|restart|reload|status]
~~ service 命令: 停止、启动、查看 redis服务
# service redis stop   ~~ 等于在 /etc/init.d/ 目录下运行 ./redis stop
# service redis start  ~~ 等于在 /etc/init.d/ 目录下运行 ./redis start
# service redis status ~~ 等于在 /etc/init.d/ 目录下运行 ./redis status
  • systemctlКоманда совместима с сервисной командой и включает в себя другие более мощные функции.
  • systemctl используется для управления различными ресурсами системы linux: системными службами, аппаратными устройствами, точками монтирования, сокетами и т. д. Далее в основном представлено использование связанных команд о службах системных служб. Поскольку systemctl обычно используется для скриптов, реализующих самозапускающиеся сервисы.
~~ 系统自启动时 启动 cron 服务,启用或禁用它
# systemctl enable crond.service
# systemctl disable ccrond.service
# systemctl is-active crond.service  ~~ 是否正在运行
# systemctl is-enabled crond.service ~~  是否建立了启动链接

~~ 启动、重启、停止、重载、杀死服务以及查看服务 httpd
# systemctl start httpd.service
# systemctl restart httpd.service
# systemctl stop httpd.service
# systemctl reload httpd.service
# systemctl status httpd.service
# systemctl kill apache.service

~~ 列出所有服务(包括启用的和禁用的)
# systemctl list-units      ~~  列出所有管理的资源单元
# systemctl list-unit-files --type=service   ~~ 只列出所有 service 类型资源

~~ 获取某个服务(httpd)的依赖性列表
# systemctl list-dependencies httpd.service

~~ 检查 httpd 服务的所有配置细节
# systemctl show httpd
  • Подробную информацию о конфигурации файла xxx.service можно найти в Интернете.Вот простое введение в шаблон.
[Unit]
Description:描述
After:auditd.service 在auditd.service启动后才启动
ConditionPathExists: 执行条件

[Service]
EnvironmentFile: 变量所在文件
ExecStart: 执行启动命令
Restart: fail时重启

[Install]
Alias:服务别名
WangtedBy: 多用户模式下需要的

нет и &

  • Комбинация nohup и & позволяет запустить процесс в фоновом режиме без зависания, формат команды:nohup command [agrs..] [&]. & означает, что программа может работать в фоновом режиме Linux, в текущем интерфейсе оболочкиctrl CВыход, программа может продолжать работать, она может игнорировать сигнал SIGINT, но она остановится с завершением работы программы оболочки, потому что запущенный процесс не защищен от сигнала SIGHUP.
  • Добавьте nohup, чтобы игнорировать сигнал SIGHUP.
~~ 在后台运行 lwl.py,且不随着 shell 关闭而死亡。永远存在
# nohup python lwl.py &> /var/log/lwl.log &

kill

  • Если вам нужно убить или остановить процесс в Linux, вы можете использовать kill, например:# kill -9 1211. kill используется не только для остановки процессов, его можно использоватьkill [-s <指定信号>][程序]отправить указанный сигнал в указанную программу, и# kill -l Все имена сигналов могут быть перечислены.
~~ 列出全部的信息名称
# kill -l 
1) SIGHUP     2) SIGINT     3) SIGQUIT     4) SIGILL     5) SIGTRAP
6) SIGABRT     7) SIGBUS     8) SIGFPE     9) SIGKILL    10) SIGUSR1
11) SIGSEGV    12) SIGUSR2    13) SIGPIPE    14) SIGALRM    15) SIGTERM
...
...
~~ 发送 SIGQUIT 给 pid = 1211 的进程
# kill -s SIGQUIT 1211  ~~ 或者 kill -SIGQUIT 1211

5 Просмотр параметров производительности системы

ps

  • Команда ps используется для отображения состояния текущего процесса. Формат команды:ps [options]
options 参数解释
-A/a      列出所有的进程
-e        等于 “-A”
f         显示程序间的关系
-w        显示加宽可以显示较多的资讯
-au       显示较详细的资讯
-aux      显示所有包含其他使用者的行程
  • ps -efОбъяснение каждого индикатора
# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  6 18:39 pts/0    00:02:27 java -jar /opt/lp-admin.jar
root        102      0  0 18:40 pts/1    00:00:00 /bin/bash
root        158    102  0 18:47 pts/1    00:00:00 /usr/bin/python /usr/bin/dstat
---------各项指标解析-----------------------
UID    程序的执行者 UID
PID    进程的ID号
PPID   则是其上级父程序的ID
C      cpu 使用的资源百分比
TTY    登入者的终端机位置
TIME   CPU 执行的时间
CMD    进程执行的命令
  • ps -auxОбъяснение каждого индикатора
# ps -aux
ps -aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  7.0  5.3 13278220 1736948 pts/0 Ssl+ 18:39   2:24 java -jar /opt/lp-admin.jar
root        102  0.0  0.0  15264  2044 pts/1    Ss   18:40   0:00 /bin/bash
root        158  0.0  0.0  52176  6756 pts/1    T    18:47   0:00 /usr/bin/python /usr/bin/dstat
root        159  0.0  0.0  52176  6756 pts/1    T    18:49   0:00 /usr/bin/python /usr/bin/dstat -n -N eth0,total
---------各项指标解析-----------------------
USER    行程拥有者
PID     pid
%CPU    占用的 CPU 使用率
%MEM    占用的记忆体使用率
VSZ     占用的虚拟记忆体大小
RSS     占用的记忆体大小
TTY     终端的次要装置号码 (minor device number of tty)
STAT    该进程程的状态:
   D:  无法中断的休眠状态 (通常 IO 的进程)
   R:  正在执行中
   S:  可中断的睡眠状态
   T:  暂停状态或跟踪状态
   Z:  僵尸进程(zombie),无法正常终止
   X: 退出状态,进程即将被销毁
START   登入者的终端机位置
TIME    CPU 执行的时间
COMMAND 进程执行的命令

lsof

  • lsof (список открытых файлов) используется для просмотра файлов, открытых вашим процессом, процесса, открывшего файл, и портов (TCP, UDP), открытых этим процессом. формат командыlsof [options] filename
options 参数解释

-a            列出打开文件存在的进程
-c<进程名>     列出指定进程所打开的文件(常用)
-p<进程号>     列出指定进程号所打开的文件(常用)
-g            列出属于gid的进程详情
-u<uname/uid> 显示归属uname或uid的进程情况
-d<fd文件号>   列出占用该文件号的进程
+d<目录>       列出目录下被打开的文件
+D<目录>       递归列出目录下被打开的文件
-n<目录>       列出使用NFS的文件
-i<条件>       列出符合条件的进程。(ip4/ip6协议、端口、 @ip )
-u            列出UID号进程详情
  • lsof индикаторы объяснил
# lsof
command  PID USER   FD   type   DEVICE     SIZE     NODE  NAME
init       1 root  txt   REG       8,2    43496  6121706 /sbin/init

---------各项指标解析-----------------------
COMMAND  进程的名称 
PID      进程标识符 
USER     进程所有者 
FD       文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等 
TYPE     文件类型,如DIR、REG等 
DEVICE   指定磁盘的名称 
SIZE     文件的大小 
NODE     索引节点(文件在磁盘上的标识) 
NAME     打开文件的确切名称
  • lsof пример
~~ 显示所有打开80端口的进程
# lsof -i:80       
~~ 那个进程在占用/etc/passwd
# lsof /etc/passwd 
~~ 显示使用fd为1211的进程
# lsof -d 1211     
~~ 显示那些文件被pid为 1211 的进程打开
# lsof -p 1211     
~~ 查看sendmail进程的文件使用情况
# lsof -c sendmail 

pidof

  • pidof — это инструмент, используемый в Linux для поиска идентификатора процесса (pid) запущенного процесса. Если мы заранее знаем имя процесса, мы можем найти pid на основе имени процесса, формата команды:pidof [options] 进程名称
options 选项参数

-s: 仅返回一个进程号;
-c: 仅显示具有相同“root”目录的进程
-x: 显示由脚本开启的进程
-o: 指定不显示的进程ID
  • пример pidof
# pidof -s nginx
1211

top

  • Команда top используется для мониторинга состояния системы Linux, например использования процессора, памяти, процессов и других ресурсов. Формат команды:top [-options]
options 选项参数

-i<时间>    设置刷新间隔时间
-u<用户名>    指定用户名
-p<进程号>    指定进程
-H           开启线程查看
  • Объяснение главных выходных показателей
# top
top - 18:20:27 up 26 days,  8:30,  2 users,  load average: 0.04, 0.09, 0.13
Tasks: 168 total,   1 running, 167 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.5 sy,  0.0 ni, 99.1 id,  0.0 wa,  0.0 hi,  0.1 si,  0.0 st
KiB Mem:  32762356 total, 14675196 used, 18087160 free,      884 buffers
KiB Swap:  2103292 total,        0 used,  2103292 free.  6580028 cached Mem

PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                
1260 root      20   0 7933492 1.173g  14004 S 0.333 3.753  58:20.74 java                       
1503 root      20   0   69172   2240   1412 S 0.333 0.007   0:48.05 httpd                       
1520 daemon    20   0  358140   3980    776 S 0.333 0.012   6:19.55 httpd                       
2323 mysql     20   0 19.918g 4.538g   9404 S 0.333 14.52 352:51.44 mysqld                     
.......
---------各项指标解析---------------------------------------------------
第一行统计信息区
    18:20:27	                    当前时间
    up 25 days, 17:29	            系统运行时间,格式为时:分
    1 user	                    当前登录用户数
    load average: 0.04, 0.09, 0.13  系统负载,三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值

Tasks:进程相关信息
    running   正在运行的进程数
    sleeping  睡眠的进程数
    stopped   停止的进程数
    zombie    僵尸进程数
Cpu(s):CPU相关信息
    %us:表示用户空间程序的cpu使用率(没有通过nice调度)
    %sy:表示系统空间的cpu使用率,主要是内核程序
    %ni:表示用户空间且通过nice调度过的程序的cpu使用率
    %id:空闲cpu
    %wa:cpu运行时在等待io的时间
    %hi:cpu处理硬中断的数量
    %si:cpu处理软中断的数量
    %st:被虚拟机偷走的cpu
Mem  内存信息  
    total	物理内存总量
    used	使用的物理内存总量
    free	空闲内存总量
    buffers	用作内核缓存的内存量
Swap 内存信息  
    total	交换区总量
    used	使用的交换区总量
    free	空闲交换区总量
    cached	缓冲的交换区总量

~~ 常用的指标
PID	进程id
PPID	父进程id
UID	进程所有者的用户id
USER	进程所有者的用户名
GROUP	进程所有者的组名
TTY	启动进程的终端名。不是从终端启动的进程则显示为 ?
PR	优先级
NI	nice值。负值表示高优先级,正值表示低优先级
P	最后使用的CPU,仅在多CPU环境下有意义
%CPU	上次更新到现在的CPU时间占用百分比
TIME	进程使用的CPU时间总计,单位秒
TIME+	进程使用的CPU时间总计,单位1/100秒
%MEM	进程使用的物理内存百分比
VIRT	进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
SWAP	进程使用的虚拟内存中,被换出的大小,单位kb。
RES	进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
CODE	可执行代码占用的物理内存大小,单位kb
DATA	可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
SHR	共享内存大小,单位kb
S       进程状态; 相关枚举值解释查看 ps -ef S 项解释
COMMAND	进程启动执行的命令行    
  • Под командой top общие сочетания клавиш для просмотра информации
h    显示快捷键帮助
k    终止一个进程
i    开/关忽略闲置和僵死进程
q    退出程序
r    重新安排一个进程的优先级别
S     切换到累计模式
s    更改刷新间隔时间,单位秒
f,F    从当前显示中添加或者删除项目
o,O    改变显示项目的顺序
l    切换显示平均负载和启动时间信息
m     切换显示内存信息
t    切换显示进程和CPU状态信息
c    切换显示命令名称和完整命令行
M     根据内存使用大小排序
P    根据CPU使用率进行排序 (默认排序)
T    根据时间/累计时间进行排序
1    展开多核cpu显示
H       线程查看模式切换为开或关

free

  • free может просматривать использование системной памяти, включая физическую память, память подкачки (swap) и буферную память ядра. Формат команды:free [-bkmg][-hlot][s delay][-c count]
free 选项参数

 -b,-k,-m,-g  表示输出显示的单位为 bytes,KB,MB,or GB,不添加选项的话默认以 KB 为单位显示
 -h          以人类可读的方式显示,即后边会自动带上单位
 -l          显示详细的低内存和高内存统计信息(增加了 Low 和 High 这两行显示)
 -o          使用旧的格式显示(不显示 -/+buffers/cache 这一行)
 -t          增加显示 Total 行,Total = Mem + Swap
 -s delay    每 delay 秒重复打印一次,delay 为具体的秒数
 -c count    循环打印 count 次后退出,count 为具体的次数。需要配合 -s delay 使用
# free -m
             total       used       free     shared    buffers     cached
Mem:         32107      30414       1692          0       1962       8489
-/+ buffers/cache:      19962      12144
Swap:            0          0          0
------各项指标解释-------------------------------------------------
Mem 表示物理内存统计:
 total   物理内存总量,total = used + free
 used    总使用缓存的数量(包含 buffers 与 cache),但其中可能部分缓存并未实际使用
 free    未被分配的内存
 shared  共享内存,一般系统不会用到,总是0
 buffers  系统分配但未被使用的 buffers 数量
 cached  系统分配但未被使用的 cache 数量
 
-/+ buffers/cache:
 used    实际使用内存,等于第一行的 used - buffers - cached
 free    实际可用内存,等于第一行的 free + buffers + cached

Swap表示交换区的使用情况,也就是我们通常所说的虚拟内存
 total   总量虚拟内存
 used    使用的虚拟内存
 free    空闲的虚拟内存

mpstat

  • mpstat — это сокращение от Multiprocessor Statistics, которое может просматривать статистику каждого вычислительного ядра в многоядерном процессоре. Формат команды:mpstat [-P {cpu|ALL}] [delay [count]]
-P {cpu|ALL}	 表示监控哪个CPU, cpu在[0,cpu个数-1]中取值
delay	         相邻的两次采样的间隔时间
count	         采样的次数,count只能和delay一起使用
# mpstat  -P ALL 2
Linux 3.10.0-862.el7.x86_64 (8f57ec39327b)      07/11/2021      _x86_64_        (6 CPU)

07:19:07 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
07:19:09 PM  all   21.43    3.36    6.54    6.45    0.00    1.29    0.00    0.00    0.00   60.93
07:19:09 PM    0   20.41    3.57    7.14    4.08    0.00    1.53    0.00    0.00    0.00   63.27
07:19:09 PM    1   22.45    3.06    6.12    5.10    0.00    1.53    0.00    0.00    0.00   61.73
---------各项输出指标解释----------------------------------------------
CPU	处理器ID	
%usr	在 delay 时间段里,用户态的 cpu 时间(%)
%nice	
%sys	在 delay 时间段里,核心时间(%)	
%iowait	在 delay 时间段里,硬盘IO等待时间(%)	
%irq	在 delay 时间段里,硬中断时间(%)	
%soft	在 delay 时间段里,软中断时间(%)	
%steal	虚拟机管理器在服务另一个虚拟处理器时虚拟CPU处在非自愿等待下花费时间的百分比	
%guest	显示运行虚拟处理器时 CPU 花费时间的百分比	
%gnice  gnice/total*100
%idle	在internal时间段里,CPU除去等待磁盘IO操作外的因为任何原因而空闲的时间闲置时间(%)

iostat

  • iostat в основном используется для вывода статистики, связанной с процессором и дисковым вводом-выводом, формат команды:iostat [options] [delay [count]]
options 选项参数

-c      只显示系统CPU统计信息,即单独输出avg-cpu结果,不包括device结果
-d      单独输出Device结果,不包括cpu结果
-k/-m   输出结果以kB/mB为单位,而不是以扇区数为单位
-x      输出更详细的io设备统计信息
delay   每次输出间隔时间
count   表示输出次数,不带count表示循环输出
  • команда по умолчаниюiostatАнализ различных показателей
# iostat
Linux 4.4.73-5-default        2021年07月08日  _x86_64_        (40 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.50    0.41    0.94    0.02    0.00   96.13

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              12.09        27.80       507.24   57343492 1046298308
sdb              17.95        30.91       647.84   63751096 1336305974
------各项指标解析-----------------------------------------------------------
avg-cpu: 总体cpu使用情况统计信息,对于多核cpu,这里为所有cpu的平均值
    %user      用户空间的CPU使用率
    %nice      CPU处在带NICE值的用户模式下的时间百分比
    %system    内核空间的CPU使用率
    %iowait    CPU等待IO的百分比 
    %steal     虚拟机的虚拟机CPU使用的CPU
    %idle      空闲的CPU   

Device: 各磁盘设备的IO统计信息。各列含义如下:
    tps        每秒进程下发的IO读、写请求数量
    KB_read/s  每秒从驱动器读入的数据量,单位为K。
    KB_wrtn/s  每秒从驱动器写入的数据量,单位为K。
    KB_read    读入数据总量,单位为K。
    KB_wrtn    写入数据总量,单位为K
  • iostat -x -k -d 1 2Анализ различных показателей
# iostat -x -k -d 1 1
Linux 4.4.73-5-default (ceshi44)        2021年07月08日  _x86_64_        (40 CPU)

Device:  rrqm/s   wrqm/s  r/s    w/s    rkB/s   wkB/s  avgrq-sz avgqu-sz await r_await w_await  svctm  %util
sda      0.08     2.48    0.37   11.71  27.80   507.24  88.53   0.02     1.34   14.96    0.90   0.09   0.10
sdb      0.00     1.20    1.28   16.67  30.91   647.83  75.61   0.17     9.51    9.40    9.52   0.32   0.57
------各项指标解析----------------------------------------------------------
rrqm/s:   每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并
wrqm/s:   每秒对该设备的写请求被合并次数
r/s:      每秒完成的读次数
w/s:      每秒完成的写次数
rkB/s:    每秒读数据量(kB为单位)
wkB/s:    每秒写数据量(kB为单位)
avgrq-sz: 平均每次IO操作的数据量(扇区数为单位)
avgqu-sz: 平均等待处理的IO请求队列长度
await:    平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)
svctm:    平均每次IO请求的处理时间(毫秒为单位)
%util:    采用周期内用于IO操作的时间比率,即IO队列非空的时间比率

netstat

  • Команда netstat используется для отображения различной информации, связанной с сетью, такой как сетевое подключение, таблица маршрутизации, состояние сетевого подключения. Формат команды:netstat [-options]
options 参数解析

-a (all)显示所有选项,默认不显示 Listen 相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态

-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令
  • Анализ различных выходных показателей
# netstat -pt 
Proto Recv-Q Send-Q Local Address   Foreign Address  State   PID/Program name  
tcp        0      0 localhost:30037 *:*              LISTEN  2109/firefox
....
------各项指标解析----------------------------------------
Proto           协议
Recv-Q          接收队列 ,一般都应该是0。如果不是则表示软件包正在队列中堆积
Send-Q          发送队列,一般都应该是0。如果不是则表示软件包正在队列中堆积
Local Address   本地地址+port
Foreign Address 远端地址+port
State           状态
PID             进程pid
Program name    进程名
  • Примеры общих команд netstat
# netstat -anp
# netstat -tnlp

vmstat

  • vmstat (статистика виртуальной памяти) может отслеживать память, процессы, ЦП и диск операционной системы. По сравнению с top вы можете видеть использование ЦП, памяти и операций ввода-вывода для всей машины, а не только использование ЦП и использование памяти для каждого процесса (сценарии использования разные).
  • формат команды
// -a:显示活跃和非活跃内存 -n:只在开始时显示一次各字段名称
# vmstat [-a] [-n] [delay [count]]
// f:总的fork进程 s:内存使用的详细信息 d:磁盘的读/写 m:系统的slab信息
# vmstat [-fsdm] 
// 查看指定磁盘分区统计信息
# vmstat [-p disk partition]
  • пример vmstat
$ vmstat 2 1
procs --------memory---------   --swap-- --io--- -system-- ----cpu-----
r b   swpd free    buff  cache    si so   bi  bo  in   cs  us sy id wa st
1 0      0 3498472 315836 3819540  0  0    0   1   2    0  3  1  96  0 0

------各项指标解析----------------------------------------
Procs(进程)
  r:     运行队列中进程数量,当这个值超过了CPU数目,就会出现CPU瓶颈了
  b:    等待IO的进程数量

Memory(内存):
  swpd:  使用虚拟内存大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了
  free:  可用内存大小
  buff:  用作缓冲的内存大小
  cache: 用作缓存的内存大
  
Swap:
  si:    每秒从交换区写到内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉
  so:    每秒写入交换区的内存大小

IO:(现在的Linux版本块的大小为1024bytes)
  bi:    每秒读取的块数
  bo:    每秒写入的块数,bi和bo一般都要接近0,不然就是IO过于频繁,需要调整

系统
  in:    每秒中断数,包括时钟中断
  cs:    每秒上下文切换数,调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好

CPU(以百分比表示):
  us:    用户进程执行时间 
  sy:    系统进程执行时间 
  id:    空闲时间(包括IO等待时间),中央处理器的空闲时间
  wa:    等待 IO 时间  
  st:    虚拟机的虚拟机CPU使用的CPU

dstat

  • vmstat предназначена для сбора статистики об общей ситуации в системе и не может проводить глубокий анализ процесса, поэтому рекомендуется использовать dstat. dstat — это многофункциональный командный инструмент, который может заменить vmstat, iostat и netstat.При выполнении команды dstat будут собираться данные -cpu-, -disk-, -net-, -paging-, -system- по умолчанию собирается каждую секунду. Формат команды:dstat [options] [delay [count]], которые используют параметр -p pid для мониторинга статистики процесса.
options 常用参数解析

-l         显示负载统计量
-c         开启cpu统计
-C <CPU>   选项跟着 cpu 的编号,显示该cpu 的统计
-d         开启 disk 统计
-g         开启分页统计
-y         开启系统统计,包括中断和上下文切换
-i         开启中断统计
-s 	   开启 swap 统计,包括used, free
-m         显示内存使用率(包括used,buffer,cache,free值)
-n         开启网络读写统计
–socket    显示网络统计数据
–tcp       显示常用的TCP统计
-N	   选项跟着网络设备名,多个用逗号隔开,进行网络统计
-p         开启对进程统计,runnable, uninterruptible, new
-r         io开启请求统计,包括read requests, write requests

--output文件  此选项也比较有用,可以把状态信息以csv的格式重定向到指定的文件中
-–disk-util   显示某一时间磁盘的忙碌状况
-–freespace   显示当前磁盘空间使用率
-–proc-count  显示正在运行的程序数量
--top-bio-adv 指出块I/O最大的进程
--top-cputime 耗费CPU时间最多的进程名和耗费时间
--top-cpu-adv 显示CPU占用最大的进程
-–top-io      显示正常I/O最大的进程
-–top-mem     显示占用最多内存的进程
  • Анализ выходных показателей
# dstat
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw 
 29   7  57   6   0   1|  85k 1457k|   0     0 |   0     0 |8350    67k
 30   9  54   6   0   1|   0  1290k| 857B  568B|   0     0 |  33k   75k
...

------各项指标解析-----------------------------------
CPU的使用率
  usr   显示了用户占比
  sys   系统占比
  idl   空闲占比
  wai   等待占比
  hiq   硬中断
  siq   软中断情况

磁盘的读写
  read  磁盘的读总数
  writ  磁盘的写总数
 
网络设备发送和接受的数据
  recv  网络收数据总数
  send  网络发数据总数

系统的分页活动
  in    内存页换入
  out   内存页换出
  
系统统计	 
  int   统计中断
  csw   上下文切换
  • Укажите для отображения состояния отправки и получения каждой сетевой карты.
# dstat -n -N eth0,total
--net/eth0---net/total-
 recv  send: recv  send
   0     0 :   0     0 
 140B  140B: 140B  140B
  18k 6570B:  18k 6570B
  • Посмотрите, кто использует всю память
# dstat -g -l -m -s --top-mem
---paging-- ---load-avg--- ------memory-usage----- ----swap--- --most-expensive-
  in   out | 1m   5m  15m | used  buff  cach  free| used  free|  memory process 
   0     0 |5.44 4.77 5.09|23.2G 2108k 7892M  233M|   0     0 |java        1670M
   0     0 |5.44 4.77 5.09|23.3G 2108k 7893M  221M|   0     0 |java        1670
  • Обрабатывать наиболее ресурсоемкую статистику
# dstat --top-cpu-adv 1 2
-------most-expensive-cpu-process-------
process              pid  cpu read write
java                   1  0.0%  43B   0                
java                   1  0.2%   0    0

sar

  • sar похож на dstat, вы можете использовать его в соответствии со своими предпочтениями, вы можете отслеживать системные ресурсы по многим аспектам, включая: чтение и запись файлов, использование системных вызовов, дисковый ввод-вывод, эффективность ЦП, использование памяти, активность процессов деятельность, связанную с интеллектуальной собственностью, и т. д. Формат команды:sar [options] [-A] [-o file] delay [count]. delay — интервал выборки, count — количество выборок, значение по умолчанию — 1.
options 选项参数

-A          所有报告的总和
-o file     表示将命令结果以二进制格式存放在文件中,file 是文件名
-u          输出CPU使用情况的统计信息
-v          输出inode、文件和其他内核表的统计信息
-d          输出每一个块设备的活动信息
-b          显示I/O和传送速率的统计信息(相对-d 是汇总信息)
-r          输出内存和交换空间的统计信息
-R          输出内存页面的统计信息
-a          文件读写情况
-q          队列长度和平均负载
-c          输出进程统计信息,每秒创建的进程数
-y          终端设备活动情况
-w          输出系统交换活动信息
-x <pid>    显示给定进程的统计信息
-n <关键词>  统计网络信息
    关键词可以是:
        DEV    网卡
        EDEV   网卡 (错误)
        NFS    NFS 客户端
        NFSD   NFS 服务器
        SOCK   Sockets (套接字)    (v4)
        SOCK6  Sockets (套接字)    (v6)
        IP     IP 流    (v4)
        EIP    IP 流    (v4) (失败信息)
        ICMP   ICMP 流  (v4)
        EICMP  ICMP 流  (v4) (失败信息)
        TCP    TCP 流   (v4)
        ETCP   TCP 流   (v4) (失败信息)
        UDP    UDP 流   (v4)
        IP6    IP 流    (v6)
        EIP6   IP 流    (v6) (失败信息)
        ICMP6  ICMP 流  (v6)
        EICMP6 ICMP 流  (v6) (失败信息)
        UDP6   UDP 流   (v6)
  • Проверьте загрузку процессора:sar -u 1 2
# sar -u  1 2
Linux 3.10.0-862.el7.x86_64 (8f57ec39327b)      07/11/2021      _x86_64_        (6 CPU)

07:02:04 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
07:02:05 PM     all     23.90      3.22      7.97      5.25      0.00     59.66
07:02:06 PM     all     26.53      4.76      8.84      5.95      0.00     53.91
Average:        all     25.21      3.99      8.40      5.60      0.00     56.79
------各项指标解析---------------------------------
%user     用户空间的CPU使用
%nice     改变过优先级的进程的CPU使用率
%system   内核空间的CPU使用率
%iowait   CPU等待IO的百分比 
%steal    虚拟机的虚拟机CPU使用的CPU
%idle     空闲的CPU
  • Просмотр использования памятиsar -r
# sar -r 1 2
Linux 3.10.0-862.el7.x86_64 (8f57ec39327b)      07/11/2021      _x86_64_        (6 CPU)

07:05:16 PM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
07:05:17 PM    299596  32398396     99.08      2084   7615088  37900868    115.91  27267692   3809860       672
07:05:18 PM    298932  32399060     99.09      2084   7615848  37900100    115.91  27267828   3810252       488
Average:       299264  32398728     99.08      2084   7615468  37900484    115.91  27267760   3810056       580

------各项指标解析--------------------
kbmemfree   空闲的物理内存大小
kbmemused   使用中的物理内存大小
%memused    物理内存使用率
kbbuffers   内核中作为缓冲区使用的物理内存大小,kbbuffers和kbcached:这两个值就是free命令中的buffer和cache. 
kbcached    缓存的文件大小
kbcommit    保证当前系统正常运行所需要的最小内存,即为了确保内存不溢出而需要的最少内存(物理内存+Swap分区)
commit      这个值是kbcommit与内存总量(物理内存+swap分区)的一个百分比的值
  • Посмотреть IO и тарифы на доставку:sar -b
# sar -b 1 2
Linux 3.10.0-862.el7.x86_64 (8f57ec39327b)      07/11/2021      _x86_64_        (6 CPU)

07:06:08 PM       tps      rtps      wtps   bread/s   bwrtn/s
07:06:09 PM    171.00      0.00    171.00      0.00   3431.00
07:06:10 PM    163.00      0.00    163.00      0.00   2620.00
Average:       167.00      0.00    167.00      0.00   3025.50
------各项指标解析--------------------
tps      磁盘每秒钟的IO总数,等于iostat中的tps
rtps     每秒钟从磁盘读取的IO总数
wtps     每秒钟从写入到磁盘的IO总数
bread/s  每秒钟从磁盘读取的块总数
bwrtn/s  每秒钟此写入到磁盘的块总数
  • Информация о сетевом интерфейсе:sar -n DEV
# sar -n DEV 1 1
Linux 3.10.0-862.el7.x86_64 (8f57ec39327b)      07/11/2021      _x86_64_        (6 CPU)

07:06:57 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
07:06:58 PM      eth0      2.00      4.00      1.45      0.56      0.00      0.00      0.00
07:06:58 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
07:06:58 PM     tunl0      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
Average:         eth0      2.00      4.00      1.45      0.56      0.00      0.00      0.00
Average:           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:        tunl0      0.00      0.00      0.00      0.00      0.00      0.00      0.00
------各项指标解析--------------------
IFACE    本地网卡接口的名称
rxpck/s  每秒钟接受的数据包
txpck/s  每秒钟发送的数据库
rxKB/S   每秒钟接受的数据包大小,单位为KB
txKB/S   每秒钟发送的数据包大小,单位为KB
rxcmp/s  每秒钟接受的压缩数据包
txcmp/s  每秒钟发送的压缩包
rxmcst/s 每秒钟接收的多播数据包  
  • Проверьте использование диска:sar -d. По сравнению с -b он может видеть информацию о каждом устройстве, а -b выводит сводную информацию.
sar -d -p 1 1  
Linux 3.10.0-862.el7.x86_64 (8f57ec39327b)      07/11/2021      _x86_64_        (6 CPU)

07:08:41 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
07:08:42 PM       sdb    160.00      0.00   2914.00     18.21      1.51      9.43      3.73     59.70
07:08:42 PM       sdc      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
07:08:42 PM       sda      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
Average:          sdb    160.00      0.00   2914.00     18.21      1.51      9.43      3.73     59.70
Average:          sdc      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:          sda      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
------各项指标解析--------------------
DEV       磁盘设备的名称,如果不加-p,会显示dev253-0类似的设备名称,因此加上-p显示的名称更直接
tps       每秒I/O的传输总数
rd_sec/s  每秒读取的扇区的总数
wr_sec/s  每秒写入的扇区的总数
avgrq-sz  平均每次次磁盘I/O操作的数据大小(扇区)
avgqu-sz  磁盘请求队列的平均长度
await     从请求磁盘操作到系统调用完成处理,每次请求的平均消耗时间
svctm     I/O的服务处理时间,即不包括请求队列中的时间
%util     I/O请求占用的CPU百分比,值越高,说明I/O越慢
  • Информация о подключении к сокету статистики:sar -n SOCK 1 1
# sar -n SOCK 1 1
Linux 3.10.0-862.el7.x86_64 (8f57ec39327b)      07/11/2021      _x86_64_        (6 CPU)

07:09:18 PM    totsck    tcpsck    udpsck    rawsck   ip-frag    tcp-tw
07:09:19 PM     10910       261         0         0         0       562
Average:        10910       261         0         0         0       562
------各项指标解析--------------------
totsck   当前被使用的socket总数
tcpsck   当前正在被使用的TCP的socket总数
udpsck   当前正在被使用的UDP的socket总数
rawsck   当前正在被使用于RAW的skcket总数
if-frag  当前的IP分片的数目
tcp-tw   TCP套接字中处于TIME-WAIT状态的连接数量
  • Статистика TCP-соединений:sar -n TCP
# sar -n TCP 1 1
Linux 3.10.0-862.el7.x86_64 (8f57ec39327b)      07/11/2021      _x86_64_        (6 CPU)

07:09:39 PM  active/s passive/s    iseg/s    oseg/s
07:09:40 PM      1.00      0.00      5.00      7.00
Average:         1.00      0.00      5.00      7.00
------各项指标解析--------------------
active/s   新的主动连接
passive/s  新的被动连接
iseg/s     接受的段
oseg/s     输出的段

pidstat

  • pidstat — это команда инструмента sysstat, который используется для мониторинга занятости системных ресурсов, таких как процессор, память, поток и ввод-вывод устройства всеми или указанными процессами. Формат команды:pidstat [options] [delay [count]]
options 参数解析

-u         默认的参数,显示各个进程的cpu使用统计
-r         显示各个进程的内存使用统计
-d         显示各个进程的IO使用情况
-p <pid>   指定进程号
-w         显示每个进程的上下文切换情况
-t         显示选择进程的线程的统计信息
  • Просмотр загрузки ЦП для всех процессов:pidstat -u
# pidstat -u
Linux 4.4.73-5-default (ceshi44)        2021年07月08日  _x86_64_        (40 CPU)

14时11分56秒   UID  PID  %usr %system  %guest    %CPU   CPU  Command
14时11分56秒     0    1  0.15    0.06    0.00    0.22    22  systemd
....
------各项指标解析----------------------------------------
UID      进程所属UID
PID      进程ID
%usr     进程在用户空间占用cpu的百分比
%system  进程在内核空间占用cpu的百分比
%guest   进程在虚拟机占用cpu的百分比
%CPU     进程占用cpu的百分比
CPU      处理进程的cpu编号
Command  当前进程对应的命令
  • Статистика использования памяти:pidstat -r
# pidstat -r
Linux 4.4.73-5-default (ceshi44)        2021年07月08日  _x86_64_        (40 CPU)

14时13分08秒   UID       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
14时13分08秒     0         1     41.04      0.00  186020   5968   0.00  systemd
14时13分08秒     0       443      0.00      0.00    5828   3004   0.00  pidstat
....
------各项指标解析----------------------------------------
PID       进程标识符
Minflt/s  任务每秒发生的次要错误,不需要从磁盘中加载页
Majflt/s  任务每秒发生的主要错误,需要从磁盘中加载页
VSZ       虚拟地址大小,虚拟内存的使用KB
RSS       常驻集合大小,非交换区五里内存使用KB
Command   task命令名
  • Отобразите использование ввода-вывода для каждого процесса:pidstat -d
# pidstat -d
Linux 3.10.0-862.el7.x86_64 (8f57ec39327b)      07/11/2021      _x86_64_        (6 CPU)

06:42:35 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
06:42:35 PM     0         1      0.05      0.00      0.00  java
06:42:35 PM     0       102      0.04      0.05      0.00  bash
------各项指标解析---------------------------
kB_rd/s   每秒从磁盘读取的KB
kB_wr/s   每秒写入磁盘KB
kB_ccwr/s 任务取消的写入磁盘的KB。当任务截断脏的pagecache的时候会发生
Command   进程执行命令
  • Показать переключатели контекста для каждого процесса:pidstat -w
# pidstat -w
Linux 3.10.0-862.el7.x86_64 (8f57ec39327b)      07/11/2021      _x86_64_        (6 CPU)

06:43:23 PM   UID       PID   cswch/s nvcswch/s  Command
06:43:23 PM     0         1      0.00      0.00  java
06:43:23 PM     0       102      0.00      0.00  bash
06:43:23 PM     0       150      0.00      0.00  pidstat
------各项指标解析---------------------------
PID       进程id
Cswch/s   每秒主动任务上下文切换数量
Nvcswch/s 每秒被动任务上下文切换数量
Command   进程执行命令
  • Укажите процесс и (-t) отобразите статистику потока для процесса:pidstat -t -p 1211
# pidstat -t -p 1211
06:44:37 PM   UID      TGID       TID    %usr %system  %guest    %CPU   CPU  Command
06:44:37 PM     0         1         -    0.00    0.00    0.00    0.00     3  java
06:44:37 PM     0         -         1    0.00    0.00    0.00    0.00     3  |__java
06:44:37 PM     0         -         6    0.00    0.00    0.00    0.00     5  |__java
06:44:37 PM     0         -         7    0.00    0.00    0.00    0.00     4  |__java
...
------各项指标解析---------------------------
TGID      主线程的表示
TID       线程id
%usr      进程在用户空间占用cpu的百分比
%system   进程在内核空间占用cpu的百分比
%guest    进程在虚拟机占用cpu的百分比
%CPU      进程占用cpu的百分比
CPU       处理进程的cpu编号
Command   当前进程对应的命令

pstree

  • Команда ps может отображать информацию о запущенных в данный момент процессах, но взаимосвязь между ними недостаточно ясна Команда pstree может отображать взаимосвязь между процессами в виде древовидной диаграммы. Формат команды:pstree [-p] <pid>
# pstree -p 3169
mongod(3169)─┬─{mongod}(3170)
             ├─{mongod}(3173)
             ├─{mongod}(3174)
             ├─{mongod}(3175)
             ├─{mongod}(3177)
             ├─{mongod}(3178)
             ├─{mongod}(3179)
             ├─{mongod}(3180)

strace

  • strace может отслеживать системные вызовы, генерируемые процессом, включая параметры, возвращаемые значения и время выполнения.Формат команды:strace [options] [command]. Если вы укажете pid процесса, удалите команду
options 简单常用的参数解析

-c                统计每一系统调用的所执行的时间,次数和出错的次数等
-t                在输出中的每一行前加上时间信息
-tt               在输出中的每一行前加上时间信息,微秒级
-ttt              微秒级输出,以秒了表示时间
-T                显示每一调用所耗的时间
-e trace=         只跟踪指定的系统 调用.例如:-e trace=open,close,rean,write表示只跟踪这四个系统调用,默认是 all
-e trace=file     只跟踪有关文件操作的系统调用
-e trace=process  只跟踪有关进程控制的系统调用
-e trace=network  跟踪与网络有关的所有系统调用
-e trace=ipc      跟踪所有与进程通讯有关的系统调用
-o filename       将strace的输出写入文件filename 
-p pid            跟踪指定的进程pid
  • пример страйса
# strace ls
# strace cat /dev/null
# strace -o output.txt -T -tt -e trace=all -p 28979
  • Каждая строка представляет собой системный вызов, левая часть знака равенства — это имя функции и ее параметры системного вызова, а правая часть — возвращаемое значение вызова.

pmap

  • pmap предоставляет карту памяти процесса, а команда pmap используется для отображения состояния памяти одного или нескольких процессов. Он сообщает адресное пространство и информацию о состоянии памяти процесса.
  • pmap [options] PID
options 参数解析
-x extended显示扩展格式
-d device显示设备格式
# pmap -dx 1
Address  Kbytes Mode  Offset           Device    Mapping
00110000 1480K  r-x-  0000000000000000 008:00005 /usr/lib/libcrypto.so.1.0.0
00282000 80K    rw--  0000000000015000 008:00005 /usr/lib/libcrypto.so.1.0.0
00296000 12K    rw--  0000000000015000 008:00005 [ anon ]
.....
------各项指标解析----------------------------------------
Address: 内存开始地址
Kbytes:  占用内存的字节数(KB)
RSS:     保留内存的字节数(KB)
Dirty:   脏页的字节数(包括共享和私有的)(KB)
Mode:    内存的权限:read、write、execute、shared、private (写时复制)
Mapping: 占用内存的文件、或[anon](分配的内存)、或[stack](堆栈)
Offset:  文件偏移
Device:  设备名 (major:minor)

watch

  • watch может помочь добиться синхронного вывода результатов команд, например, netstat не имеет функции вывода результатов через интервалы времени.watch [-options] <command>
options 常用参数选项

-n <num> watch 默认每2秒运行一下程序,可以用 -n 来指定间隔的时间  
-d       watch 会高亮显示变化的区域

切换终端: Ctrl+x     退出watch:Ctrl+g
  • смотреть пример
# watch -n 1 -d netstat -ant
# watch uptime

6 Очистка веб-данных

tcpdump

  • tcpdump — это инструмент для захвата пакетов, который запускается из командной строки. Это позволяет пользователям перехватывать и отображать TCP/IP и другие пакеты данных, отправленные или полученные по сетевому соединению с компьютером. tcpdump подходит для большинства Unix-подобных операционных систем, формат команды tcpdump следующий:
# tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ]
        [ -i 网络接口 ] [ -r 文件名] [ -s len ]
        [ -T 类型 ] [ -w 文件名 ] [ 表达式 ]
选项参数

-a       将网络地址和广播地址转变成名字
-d     将匹配信息包的代码以人们能够理解的汇编格式给出
-dd     将匹配信息包的代码以c语言程序段的格式给出
-ddd    将匹配信息包的代码以十进制的形式给出
-e    在输出行打印出数据链路层的头部信息,包括源mac和目的mac,以及网络层的协议
-f    将外部的Internet地址以数字的形式打印出来
-l    使标准输出变为缓冲行形式
-n    指定将每个监听到数据包中的域名转换成IP地址后显示,不把网络地址转换成名字
-nn:    指定将每个监听到的数据包中的域名转换成IP、端口从应用名称转换成端口号后显示
-t    在输出的每一行不打印时间戳
-v    输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息
-vv    输出详细的报文信息
-c    在收到指定的包的数目后,tcpdump就会停止
-F    从指定的文件中读取表达式,忽略其它的表达式
-i    指定监听的网络接口
-p:     将网卡设置为非混杂模式,不能与host或broadcast一起使用
-r    从指定的文件中读取包(这些包一般通过-w选项产生)
-w    直接将包写入文件中,并不分析和打印出来
-s len  len 表示从一个包中截取的字节数。0表示包不截断,抓完整的数据包。默认的话 tcpdump 只显示部分数据包,默认68字节
-T     将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议)
-X       告诉tcpdump命令,需要把协议头和包内容都原原本本的显示出来(tcpdump会以16进制和ASCII的形式显示),这在进行协议分析时是绝对的利器。    
  • Варианты выраженияЕго можно грубо разделить на три условия фильтра: "тип", "направление" и "протокол". Комбинация этих трех условий составляет наше выражение фильтра.
    • введите ключевое слово: в основном включает хост, сеть, порт, например, хост 210.45.114.211, укажите хост 210.45.114.211, сеть 210.11.0.0 указывает, что 210.11.0.0 является сетевым адресом, порт 21 указывает, что номер порта равен 21.
    • Ключевые слова для направления перевода: В основном включает src , dst , dst или src , dst и src , эти ключевые слова указывают направление передачи. Например, src 210.45.114.211 указывает, что исходный адрес в ip-пакете — 210.45.114.211, а dst net 210.11.0.0 указывает, что сетевой адрес назначения — 210.11.0.0.
    • Ключевые слова соглашения: в основном включают ether, ip, ip6, arp, rarp, tcp, udp и другие типы, а также содержимое протокола этих пакетов. Если протокол не указан, tcpdump будет отслеживать все протоколы (подробности см. в официальной документации).

image.png

Первая строка: «tcpdump: подробный вывод подавлен, используйте -v или -vv для декодирования полного протокола»;
Предложите использовать опции -v и -vv, чтобы увидеть более полный вывод


Вторая строка "прослушивание на eth0, тип ссылки EN10MB (Ethernet), размер захвата 65535 байт";
Мы отслеживаем сетевые пакеты, проходящие через сетевое устройство eth0, а его канальный уровень основан на Ethernet, а предельный размер пакетов, которые необходимо захватить, составляет 65535 байт. Ограничение размера пакета можно установить с помощью опции -s.


Строка 3 "12:40:33.569037 00:19:e0:b5:10:94 > 00:1a:a0:31:39:d4, ethertypeIPv4 (0x0800)"
12:40:33.569037 соответствует «часу», «минуте», «секунде» и «незаметно», когда пакет был захвачен. 00:19:e0:b5:10:94 > 00:1a:a0:31:39:d4 означает, что MAC-адрес 00:19:e0:b5:10:94 отправляется на MAC-адрес 00:1a:a0:31: 39: Хост d4, ethertype IPv4 (0x0800) указывает, что тип протокола кадра Ethernet — ipv4 (то есть код равен 0x0800).


Четвертая строка "длина 66: 210.45.123.249.27236 > 172.16.0.11.1111: Флаги [S],seq 1624463808;
длина 66 означает, что длина эфирного кадра равна 66. 210.45.123.249.27236 означает, что IP-адрес источника этого пакета — 210.45.123.249, порт источника — 27236, «>» означает направление передачи пакета, 172.16.0.11.1111, означает, что IP-адрес получателя этого пакета — 172.16. 0.11, порт назначения — 1111, а порт 1111 — это порт прослушивания одного из моих веб-серверов. Флаги — это [S], что указывает на то, что это syn для установления пакета соединения (то есть первое рукопожатие трехэтапного рукопожатия). способ рукопожатия: клиент (210.45.123.249) отправляет запрос синхронизации для установления пакета соединения


Строка 5" win 8192, параметры [mss 1460,nop,wscale 2,nop,nop,sackOK], длина 0"
win 8192 означает, что размер окна составляет 8192 байта. options[mss 1460,nop,wscale 2,nop,nop,sackOK] — это необязательное поле в заголовке tcp. mss 1460 указывает, что mss — это максимальная длина сегмента, объявленная отправителем (клиентом), и отправитель не получит более это длина сегмента TCP (это значение имеет определенную связь с MTU). nop — это неактивная опция, wscale указывает, что коэффициент расширения окна, используемый отправителем, равен 2, а sackOK указывает, что отправитель поддерживает и соглашается использовать опцию SACK.

  • пример tcpdump
~~ 只查目标机器端口是21或80的网络包,其他端口不关注
# tcpdump -i eth0 -c 10 'dst port 21 or dst port 80'
~~ 想获取172.16.10.11 和 google.com之间建立TCP三次握手中带有SYN标记位的网络包.
# tcpdump -i eth0 'host 172.16.0.11 and host google.com and tcp[13]&2!=0' -c 3 -nn
  • tcp[13]&2!=0 последней команды может быть немного странным, давайте проанализируем его здесь, биты флага (URG, ACK, PSH, RST, SYN, FIN) находятся в 13-м байте tcp-заголовка, и SYN находится в младшем втором бите (xxxxxx10, десятичное число равно 2), и 2 выполняются, чтобы определить, является ли сообщение синхронным сообщением.

nc

  • Команда nc реализует прослушивание любого порта TCP/UDP, и nc можно использовать в качестве сервера для прослушивания указанного порта в режиме TCP или UDP. nc также может инициировать соединения TCP или UDP в качестве клиента.
options 常用参数
-l    用于指定nc将处于侦听模式。指定该参数,则意味着nc被当作server,侦听并接受连接,而非向其它地址发起连接。
-s    指定发送数据的源IP地址,适用于多网卡机
-u    指定nc使用UDP协议,默认为TCP
-v    输出交互或出错信息,新手调试时尤为有用
-w    超时秒数,后面跟数字
-z    使用 Zero-I/O mode,只在扫描通信端口时使用
  • пример
~~ 端口扫描
# nc -v -w 2 192.168.2.34 -z 21-24
nc: connect to 192.168.2.34 port 21 (tcp) failed: Connection refused
Connection to 192.168.2.34 22 port [tcp/ssh] succeeded!

~~ 简单聊天工具 在 192.168.2.34 服务端监听 1211
# nc -l 1211
~~ 在 192.168.2.33 上 连接 34 的 1211端口
# nc 192.168.2.34 1211

curl

  • curl — очень мощный инструмент командной строки http. Он поддерживает загрузку и скачивание файлов. Формат команды:curl [option] [url]
option 常用参数

-A/--user-agent <string>   设置用户代理发送给服务器
-b <name=string/file>      cookie字符串或文件读取位置
-c <file>                  操作结束后把cookie写入到这个文件中
-C <offset>                断点续转
-D <file>                  把header信息写入到该文件中
-e                         来源网址(伪造referer)
-o                         把输出写到该文件中
-O                         把输出写到该文件中,保留远程文件的文件名
-r <range>                 分块下载来自HTTP/1.1或FTP服务器 range字节
-T <file>                  上传文件
-u <user[:password]>       设置服务器的用户和密码
-L                         参数会让 HTTP 请求跟随服务器的重定向。curl 默认不重定向
-x <host:port>             在给定的端口上使用HTTP代理
-#                         进度条显示当前的传送状态
-X                         指定 HTTP 请求的方法
-d                         POST方式传送数据(默认是application/x-www-form-urlencoded)
-H/--header <line>         自定义头信息传递给服务器
  • пример завитка
~~ 显示下载进度条
# curl -# -O http://www.linux.com/lwl.jpg
~~ 上传文件
# curl -T lwl.jpg -u 用户名:密码 ftp://www.linux.com/img/
~~ 发出 POST 请求
# curl -X POST https://www.example.com
~~ data.json 是json 数据
# curl localhost:3000/api/json -X POST -d @data.json --header "Content-Type: application/json"

wget

  • wget — это инструмент для загрузки файлов, который является важным инструментом для пользователей Linux, потому что нам часто приходится загружать какое-то программное обеспечение или восстанавливать резервные копии с удаленных серверов на локальные серверы. wget поддерживает протоколы HTTP, HTTPS и FTP. Формат команды:wget [-options] [url]
options 常用参数解析

-O <fileName>        把文档写到FILE文件中
-c                   (断点续传)接着下载没下载完的文件
-P filePath          将文件保存到 filePath 目录 
-b                   后台下载

TP 选项:
--ftp-user=USER         设置 ftp 用户名为 USER
--ftp-password=PASS     设置 ftp 密码为 PASS
  • пример wget
~~ wget -b 后台下载
# wget -c -b -O wordpress.zip https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz
~~ ftp 下载 csc.txt 文件
# wget --ftp-user=baidu  --ftp-password=123 ftp://192.168.19.1/lwl/csc.txt

7 команд сценария оболочки

синтаксис программы оболочки

  • Чтобы писать сценарии оболочки, вы должны быть знакомы с основным синтаксисом программ оболочки.
  • Статья, которую я написал ранее:учебник по оболочке и скрипты

sed

  • Если речь идет об обработке текста, вы можете попробовать sed, который использует режим редактирования потока.Прежде чем sed будет обрабатывать данные, вам необходимо заранее указать набор правил, и sed будет редактировать данные в соответствии с этими правилами.
  • Статья, которую я написал ранее:учебник sed - команды linux

awk

  • Awk также подходит для обработки текста и является более мощным; подобно команде sed, команда awk также сканирует файл построчно в поисках строки, содержащей целевой текст. пользователь хочет в этой строке; ничего не делать со строкой
  • Статья, которую я написал ранее:Учебник по awk — команды Linux

xargs

  • xargs — мощная команда, в конвейере команд Linux она может захватывать вывод предыдущей команды, а затем передавать его другой команде. Команда по умолчанию для xargs — это echo, что означает, что входные данные, переданные в xargs, будут содержать символы новой строки и пробелы, но при обработке xargs символы новой строки и пробелы будут заменены пробелами.
  • Формат команды:command |xargs [-options] nextCommand
options 参数解释

-e flag 或 -E flag    flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止
-r no-run-if-empty    当xargs的输入为空的时候则停止xargs,不再去执行
-t                    表示先打印命令,然后再执行
-p                    每执行一次xargs 后面跟随的 nextCommand 时,询问一次用户
-n num                将输出数据用"空格"分割成多个参数,再按n个一组分批作为 nextCommand 执行时的参数
-L num 或 -l num      从标准输入一次读取 num 行送给 nextCommand 命令执行
-i 或 -I              将一行一行赋值给占位符 {},在接下来的command里用 {} 替换数据
-s num                命令行的最大字符数,指的是 xargs 后面那个命令的最大命令行字符数
-d delim              指定分隔符,默认的xargs分隔符是回车(换行键),这里修改的是xargs的分隔符
  • пример xargs
~~ 复制所有图片文件到 /data/images 目录下
# ls *.jpg | xargs -n1 -I {} cp {} /data/images
~~ 查找所有的 jpg 文件,并且压缩它们
# find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz

8 общих команд JVM

jps

  • Используйте java-версию команды ps для просмотра процесса java и связанной с ним информации.Если вы хотите найти pid процесса java, вы можете использовать команду jps вместо команды ps в linux.Формат команды:jps [-options] [hostIP]. Если вы хотите просмотреть процессы jvm на других машинах hostIP, вам нужно запустить jstatd на машине, которую нужно просмотреть.
options 参数解释

-l : 输出主类全名或jar路径
-q : 只输出LVMID
-m : 输出JVM启动时传递给main()的参数
-v : 输出JVM启动时显示指定的JVM参数
  • пример jps
 # jps -lmv
18884 /opt/app/spring-boot/order.jar --spring.profiles.active=test
39812 /opt/app/spring-boot/user.jar --spring.profiles.active=test

jinfo

  • jinfo — это команда, используемая для просмотра параметров JVM и динамического изменения некоторых параметров JVM; формат команды:jinfo [-option] <pid>
options 参数解释

-flag <name>          打印指定名称的参数
-flag [+|-]<name>     打开或关闭参数
-flag <name>=<value>  设置参数
-flags                打印所有参数
-sysprops             打印系统配置
默认是 flags 和 sysprops
  • пример jinfo
# jinfo -flags 19092
Attaching to process ID 19092, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.181-b13
Non-default VM flags: -XX:-BytecodeVerificationLocal -XX:-BytecodeVerificationRemote -XX:CICompilerCount=4 -XX:InitialHeapSize=266338304 -XX:+ManagementServer -XX:Max
HeapSize=4229955584 -XX:MaxNewSize=1409810432 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=88604672 -XX:OldSize=177733632 -XX:TieredStopAtLevel=1 -XX:+UseCompressedClassP ointers -XX:+UseCompressedOops 
.....

jstat

  • Команда jstat — часто используемая команда, которая в основном используется для просмотра информации о состоянии JVM во время ее работы, включая состояние памяти, сборку мусора и т. д. Формат команды:jstat [-option] pid [interval] [count], pid — идентификатор процесса, interval — интервал печати (в миллисекундах), count — количество раз печати (по умолчанию печатается всегда)
option 参数解释

-class            : class loader的行为统计
-compiler         : HotSpt JIT编译器行为统计
-gc               : 垃圾回收堆的行为统计
-gccapacity       : 各个垃圾回收代容量(young,old,perm)和他们相应的空间统计
-gcutil           : 垃圾回收统计概述
-gccause          : 垃圾收集统计概述(同-gcutil),附加最近两次垃圾回收事件的原因
-gcnew            : 新生代行为统计
-gcnewcapacity    : 新生代与其相应的内存空间的统计
-gcold            : 年老代和永生代行为统计
-gcoldcapacity    : 年老代行为统计
-gcpermcapacity   : 永生代行为统计
-printcompilation : HotSpot编译方法统计
  • пример jstat
# jstat -gcutil 18884
S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
0.00  84.14  19.93  45.77  91.32  87.65    641   18.311     6    3.512   21.824

------各项指标解析----------------------------------------
S0	第 0 个 survivor(幸存区)使用的百分比
S1	第 1 个 survivor(幸存区)使用的百分比
E	Eden 区使用内存的百分比
O	老生代内存使用的百分比
P/M	PermGen/MetaSpace 的内存使用百分比
YGC	程序启动以来 Young GC 发生的次数
YGCT	程序启动以来 Young GC 共消耗的时间(s)
FGC	程序启动以来 Full GC 发生的次数
FGCT	程序启动以来 Full GC 共消耗的时间(s)
GCT	程序启动以来 GC 的总用时(s)

jstack

  • jstack — это команда, используемая для просмотра моментального снимка потока jvm, который представляет собой набор стеков методов, выполняемых текущим потоком JVM. Используйте команду jstack, чтобы найти причину остановки потока в течение длительного времени, такую ​​как взаимоблокировка, бесконечный цикл и т. д. jstack также может просматривать информацию о стеке в основном файле, сгенерированном при сбое программы; формат команды:jstack [-Flm] <pid>
option 参数解释

-F  当使用jstack <pid>无响应时,强制输出线程堆栈
-m  同时输出java和本地堆栈(混合模式)
-l  额外显示锁信息 (小写l)
  • пример jstack, просмотр стека потоков с pid = 1211
# jstack -l 1211
"DiscoveryClient-CacheRefreshExecutor-0" #146 daemon prio=5 os_prio=0 tid=0x000000002ba2c000 nid
=0x4fe4 waiting on condition [0x000000002cade000]
   java.lang.Thread.State: WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  <0x00000006c775dc60> (a java.util.concurrent.SynchronousQueue$Tra
nsferStack)
......

jmap

  • jmap — это команда, используемая для создания файла дампа кучи или просмотра различной информации, связанной с кучей, такой как просмотр очереди выполнения финализации, сведений о куче и ее использовании; формат команды:jmap [-option] <pid>
option 参数解释

-heap 打印java heap摘要
-histo[:live] 打印堆中的java对象统计信息
-clstats 打印类加载器统计信息
-finalizerinfo 打印在f-queue中等待执行finalizer方法的对象
-dump:<dump-options> 生成java堆的dump文件
      dump-options:
      live 只转储存活的对象,如果没有指定则转储所有对象
      format=b 二进制格式
      file=<file> 转储文件到 <file>
-F 如果jvm挂起,可用-F强制执行选项,会影响java 服务
  • пример jmap, дамп файла кучи памяти процесса pid=1211 java
# jmap -dump:live,format=b,file=dump.hprof 1211
Dumping heap to /home/lwl/dump.hprof ...
Heap dump file created

Добро пожаловать на ошибку в тексте

Справочная статья