文章目录
- ls 列出有关文件的信息(默认为当前目录)
- pwd 打印当前工作目录的完整路径名
- touch 将每个文件的访问和修改时间更新为当前时间。除非提供-c或-h,否则将不存在的file参数创建为空。
- cat 将FILE或标准输入连接到标准输出(展示文件内容)
- tac 与cat命令展示相反的内容
- mkdir 如果目录不存在,则创建目录。
- cd 切换当前目录至指定目录
- rm 删除
- mv 移动目录或者文件到指定目录下,同时具有重命名的功能
- cp 复制
- echo 打印变量、文本内容
- head 显示每个指定文件或标准输入(如果未指定文件)的前几行或字节
- tail 显示每个指定文件或标准输入(如果未指定文件)的后几行或字节
- more/less 流式读取
- wc 显示每个输入文件或标准输入(如果未指定文件)中每个输入文件中包含的行数,字数和字节数
- date 显示从内核时钟读取的日期和时间
- cal 显示公历(阳历)日历
- which 搜索某个系统命令的位置,并且返回第一个搜索结果
- whereis 用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)
- nl 计算文件中行号,将输出的文件内容自动的加上行号
- ps 显示标题行,其后是包含有关具有控制终端的所有进程的信息的行
- kill 杀死进程
- find 查找指定文件
- grep 搜索匹配指定内容
- cut 从每个文件中剪切出每行的选定部分
- diff 比较两个文件的不同
- tar 压缩和解压文件
- du 查看目录和文件大小
- df 展示当前系统磁盘使用情况
- lsof 显示当前系统打开的文件
- ping 将ICMP ECHO_REQUEST数据包发送到网络主机
- netstat 查看端口使用情况
- ifconfig 显示网络设备信息
- hostname 显示系统的DNS名称,并显示或设置其主机名或NIS域名
- traceroute 跟踪从IP网络获取到给定主机的路由信息包
- route 操纵内核的IP路由表
- wget 从Web非交互式下载文件
- vmstat 显示有关进程,内存,页面调度,块IO,陷阱,磁盘和cpu活动的信息
- free 显示内存使用情况
- top 提供正在运行的系统的动态实时视图
- sar 系统活动情况报告
转载自 https://mp.weixin.qq.com/s/7bSwKiPmtJbs7FtRWZZqpA
ls 列出有关文件的信息(默认为当前目录)
ls [OPTION]... [FILE]...
-a
列出指定目录下的所有文件,包括隐藏文件
-c
使用最后一次更改文件状态以进行排序(-t
)或长时间打印(-l
)的时间
-h
与-l
选项一起使用时,显示单位k
-l
长格式列表。如果输出到终端,则所有文件大小的总和将输出到长清单前面的一行中
-n
以数字形式显示用户和组id,而不是在长(-l
)输出中转换为用户或组名。这个选项默认打开-l
选项
-o
以长格式列出,但省略组id
-s
显示每个文件实际使用的文件系统块的数量,以512字节为单位,其中部分单元四舍五入为下一个整数值
-t
在按照字典顺序对操作数排序之前,先按修改的时间排序(最近修改的是first)
-u
使用最后一次访问的时间,而不是最后一次修改文件进行排序
pwd 打印当前工作目录的完整路径名
pwd [OPTION]...
touch 将每个文件的访问和修改时间更新为当前时间。除非提供-c或-h,否则将不存在的file参数创建为空。
touch [OPTION]... FILE...
-a
或--time=atime
或--time=access
或--time=use
只更改存取时间。
-c
或--no-create
不建立任何文档。
-d
使用指定的日期时间,而非现在的时间。
-f
此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。
-m
或--time=mtime
或--time=modify
只更改变动时间。
-r
把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。
-t
使用指定的日期时间,而非现在的时间。
cat 将FILE或标准输入连接到标准输出(展示文件内容)
cat [OPTION]... [FILE]...
-A
, --show-all
等价于 -vET
-b
, --number-nonblank
对非空输出行编号
-e
等价于 -vE
-E
, --show-ends
在每行结束处显示
-n
, --number
对输出的所有行编号,由1开始对所有输出的行数编号
-s
, --squeeze-blank
有连续两行以上的空白行,就代换为一行的空白行
-t
与 -vT
等价
-T
, --show-tabs
将跳格字符显示为 ^I
-v
, --show-nonprinting
使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外
tac 与cat命令展示相反的内容
mkdir 如果目录不存在,则创建目录。
mkdir [OPTION]... DIRECTORY...
-m
, --mode=模式
,设定权限<模式> (类似 chmod),而不是 rwxrwxrwx 减 umask
-p
, --parents
可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录;
-v
, --verbose
每次创建新目录都显示信息
cd 切换当前目录至指定目录
#打印当前目录到标准输出
$ pwd
/Users/localhost
#切换到目录/
$ cd /
rm 删除
rm [-dfiPRrvW] file ...
-f
, --force
忽略不存在的文件,从不给出提示。
-i
, --interactive
进行交互式删除
-r
, -R
, --recursive
指示rm将参数中列出的全部目录和子目录均递归地删除。
-d
, --dir
删除空目录
mv 移动目录或者文件到指定目录下,同时具有重命名的功能
mv [-f | -i | -n] [-v] source target
mv [-f | -i | -n] [-v] source ... directory
-b
:若需覆盖文件,则覆盖前先行备份。
-f
:force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
-i
:若目标文件 (destination) 已经存在时,就会询问是否覆盖
-n
:不要覆盖现有文件。(-n选项将覆盖以前的任何-f或-i选项。)
-u
:若目标文件已经存在,且 source 比较新,才会更新(update)
cp 复制
cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file target_file
cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file ... target_directory
-a
, --archive
等于-dR --preserve=all
--backup[=CONTROL
为每个已存在的目标文件创建备份
-b
类似--backup
但不接受参数
--copy-contents
在递归处理是复制特殊文件内容
-d
等于--no-dereference --preserve=links
-f
, --force
如果目标文件无法打开则将其移除并重试(当 -n
选项存在时则不需再选此项)
-i
, --interactive
覆盖前询问(使前面的 -n 选项失效)
-H
跟随源文件中的命令行符号链接
-l
, --link
链接文件而不复制
-L
, --dereference
总是跟随符号链接
-n
, --no-clobber
不要覆盖已存在的文件(使前面的 -i
选项失效)
-P
, --no-dereference
不跟随源文件中的符号链接
-p
等于–preserve=模式,所有权,时间戳
--preserve[=属性列表
保持指定的属性(默认:模式,所有权,时间戳),如果可能保持附加属性:环境、链接、xattr 等
-R, -r, --recursive
复制目录及目录内的所有项目
echo 打印变量、文本内容
$ echo "change world"
change world
#输出PWD环境变量的值
#echo \$name查看某个环境变量
$ echo $PWD
/Users/localhost/test
head 显示每个指定文件或标准输入(如果未指定文件)的前几行或字节
head [-n count | -c bytes] [file ...]
-n
展示前n行
-c
展示前n个字符
tail 显示每个指定文件或标准输入(如果未指定文件)的后几行或字节
tail [-n count | -c bytes] [file ...]
-f
循环读取
-q
不显示处理信息
-v
显示详细的处理信息
-c
<数目> 显示的字节数
-n
<行数> 显示行数
--pid=PID
与-f
合用,表示在进程ID,PID死掉之后结束.
-q, --quiet, --silent
从不输出给出文件名的首部
-s, --sleep-interval=S
与-f
合用,表示在每次反复的间隔休眠S秒
more/less 流式读取
less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件
more [-dlfpcsu ] [-num ] [+/ pattern] [+ linenum] [file ... ]
+n
从笫n行开始显示
-n
定义屏幕大小为n行
+/pattern
在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之后开始显示
-c
从顶部清屏,然后显示
-d
提示“Press space to continue,’q’ to quit(按空格键继续,按q键退出)”,禁用响铃功能
-l
忽略Ctrl+l(换页)字符
-p
通过清除窗口而不是滚屏来对文件进行换页,与-c选项相似
-s
把连续的多个空行显示为一行
-u
把文件内容中的下画线去掉
wc 显示每个输入文件或标准输入(如果未指定文件)中每个输入文件中包含的行数,字数和字节数
wc [-clmw] [file ...]
-c
统计字节数。
-l
统计行数。
-m
统计字符数。这个标志不能与 -c 标志一起使用。
-w
统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。
-L
打印最长行的长度。
date 显示从内核时钟读取的日期和时间
date [-jRu] [-r seconds | filename] [-v [+|-]val[ymwdHMS]] ... [+output_fmt] date [-jnu] [[[mm]dd]HH]MM[[cc]yy][.ss]
date [-jnRu] -f input_fmt new_date [+output_fmt]
date [-d dst] [-t minutes_west]
%H
小时(以00-23来表示)。
%I
小时(以01-12来表示)。
%K
小时(以0-23来表示)。
%l
小时(以0-12来表示)。
%M
分钟(以00-59来表示)。
%P
AM或PM。
%r
时间(含时分秒,小时以12小时AM/PM来表示)。
%s
总秒数。起算时间为1970-01-01 00:00:00 UTC。
%S
秒(以本地的惯用法来表示)。
%T
时间(含时分秒,小时以24小时制来表示)。
%X
时间(以本地的惯用法来表示)。
%Z
市区。
%a
星期的缩写。
%A
星期的完整名称。
%b
月份英文名的缩写。
%B
月份的完整英文名称。
%c
日期与时间。只输入date指令也会显示同样的结果。
%d
日期(以01-31来表示)。
%D
日期(含年月日)。
%j
该年中的第几天。
%m
月份(以01-12来表示)。
%U
该年中的周数。
%w
该周的天数,0代表周日,1代表周一,异词类推。
%x
日期(以本地的惯用法来表示)。
%y
年份(以00-99来表示)。
%Y
年份(以四位数来表示)。
%n
在显示时,插入新的一行。
%t
在显示时,插入tab。
MM
月份(必要)
DD
日期(必要)
hh
小时(必要)
mm
分钟(必要)
ss
秒(选择性)
-d<字符串>
显示字符串所指的日期与时间。字符串前后必须加上双引号。
-s<字符串>
根据字符串来设置日期与时间。字符串前后必须加上双引号。
-u
显示GMT。
cal 显示公历(阳历)日历
cal [-3hjy] [-A number] [-B number] [[month] year]
cal [-3hj] [-A number] [-B number] -m month [year]
ncal [-3hjJpwy] [-A number] [-B number] [-s country_code] [[month] year]
ncal [-3hJeo] [-A number] [-B number] [year]
ncal [-CN] [-H yyyy-mm-dd] [-d yyyy-mm]
-1
显示一个月的月历
-3
显示系统前一个月,当前月,下一个月的月历
-s
显示星期天为一个星期的第一天,默认的格式
-m
显示星期一为一个星期的第一天
-j
显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数)
-y
显示当前年份的日历
which 搜索某个系统命令的位置,并且返回第一个搜索结果
$ which ls
alias ls='ls --color=auto'
/bin/ls
-n
指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。
-p
与-n
参数相同,但此处的包括了文件的路径。
-w
指定输出时栏位的宽度。
whereis 用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)
whereis [program ...]
-b
定位可执行文件。
-m
定位帮助文件。
-s
定位源代码文件。
-u
搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件。
-B
指定搜索可执行文件的路径。
-M
指定搜索帮助文件的路径。
-S
指定搜索源代码文件的路径。
nl 计算文件中行号,将输出的文件内容自动的加上行号
nl [-p] [-b type] [-d delim] [-f type] [-h type] [-i incr] [-l num] [-n format] [-s sep] [-v startnum] [-w width] [file]
$ nl test.txt
-b
:指定行号指定的方式,主要有两种:
-b a
:表示不论是否为空行,也同样列出行号(类似 cat -n);
-b t
:如果有空行,空的那一行不要列出行号(默认值);
-n
:列出行号表示的方法,主要有三种:
-n ln
:行号在萤幕的最左方显示;
-n rn
:行号在自己栏位的最右方显示,且不加 0 ;
-n rz
:行号在自己栏位的最右方显示,且加 0 ;
-w
:行号栏位的占用的位数。
-p
在逻辑定界符处不重新开始计算。
ps 显示标题行,其后是包含有关具有控制终端的所有进程的信息的行
ps [-AaCcEefhjlMmrSTvwXx] [-O fmt | -o fmt] [-G gid[,gid...]] [-g grp[,grp...]] [-u uid[,uid...]] [-p pid[,pid...]] [-t tty[,tty...]] [-U user[,user...]]
ps [-L]
#查看所有进程
$ ps -a
#查看进程的环境变量和程序间的关系
$ ps -ef
-a
显示同一终端下的所有程序
-A
显示所有进程
c
显示进程的真实名称
-N
反向选择
-e
等于“-A”
e
显示环境变量
f
显示程序间的关系
-H
显示树状结构
r
显示当前终端的进程
T
显示当前终端的所有程序
u
指定用户的所有进程
-au
显示较详细的资讯
-aux
显示所有包含其他使用者的行程
-C<命令>
列出指定命令的状况
--lines<行数>
每页显示的行数
--width<字符数>
每页显示的字符数
kill 杀死进程
kill [-s signal|-p] [-q sigval] [-a] [--] pid...
kill -l [signal]
#查看当前系统信号
$ 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
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
# 强制停止
kill -9 pid
# 待进程释放资源后停止
kill -15 pid
HUP 1
终端断线
INT 2
中断(同 Ctrl + C)
QUIT 3
退出(同 Ctrl + \)
TERM 15
终止
KILL 9
强制终止
CONT 18
继续(与STOP相反, fg/bg命令)
STOP 19
暂停(同 Ctrl + Z)
-l
信号,若果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称
-a
当处理当前进程时,不限制命令名和进程号的对应关系
-p
指定kill 命令只打印相关进程的进程号,而不发送任何信号
-s
指定发送信号
-u
指定用户
find 查找指定文件
find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression]
find [-H | -L | -P] [-EXdsx] -f path [path ...] [expression]
# 查找/Users目录下所有以.log结尾的文件
$ find /Users -name "*.log" -print
# -exec后面接操作指令
$ find /home/midou/logs// -mtime +30 -name "*.log.gz" -exec rm -rf {} \;
-print
:find命令将匹配的文件输出到标准输出。
-exec
:find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } \;
,注意{ }
和\;
之间的空格。
-name
按照文件名查找文件。
-perm
按照文件权限来查找文件。
-prune
使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth
选项,那么-prune
将被find
命令忽略。
-user
按照文件属主来查找文件。
-group
按照文件所属的组来查找文件。
-mtime -n +n
按照文件的更改时间来查找文件, - n
表示文件更改时间距现在n天以内,+ n
表示文件更改时间距现在n天以前。find命令还有-atime
和-ctime
选项,但它们都和-m time
选项。
-nogroup
查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
-nouser
查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
-newer file1 ! file2
查找更改时间比文件file1新但比文件file2旧的文件。
-type
查找某一类型的文件,诸如:
b
- 块设备文件。
d
- 目录。
c
- 字符设备文件。
p
- 管道文件。
l
- 符号链接文件。
f
- 普通文件。
-size n
:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。
-depth
:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
-fstype
:查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。
-mount
:在查找文件时不跨越文件系统mount点。
-follow
:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
-cpio
:对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。
另外,下面三个的区别:
-amin n
查找系统中最后N分钟访问的文件
-atime n
查找系统中最后n24小时访问的文件
-cmin n
查找系统中最后N分钟被改变文件状态的文件
-ctime n
查找系统中最后n24小时被改变文件状态的文件
-mmin n
查找系统中最后N分钟被改变文件数据的文件
-mtime n
查找系统中最后n*24小时被改变文件数据的文件
grep 搜索匹配指定内容
grep [-abcdDEFGHhIiJLlmnOopqRSsUVvwxZ] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color[=when]] [--colour[=when]][--context[=num]] [--label] [--line-buffered] [--null] [pattern] [file ...]
$ grep '20:[1-5][0-9]:' *.log #匹配当前目录下搜索log日志中,20点的日志
$ grep '20:[1-5][0-9]' 1.log 2.log 3.log #指定在这三个文件中查找
#grep规则是支持正则表达式的
$ ps -ef|grep java #查找所有java进程
$ ps -ef|grep java #-c可以统计查找的个数
$ grep '20:[1-5][0-9]:' *.log | grep -v '20:[3-4][0-9]:' # -v反向选择,相当于过滤
$ grep 'ab|bc' *.log #支持|语法,匹配含有ab或者bc的文本行
-a --text
不要忽略二进制的数据。
-A<显示行数> --after-context=<显示行数>
#除了显示符合范本样式的那一列之外,并显示该行之后的内容。
-b --byte-offset
#在显示符合样式的那一行之前,标示出该行第一个字符的编号。
-B<显示行数> --before-context=<显示行数>
#除了显示符合样式的那一行之外,并显示该行之前的内容。
-c --count
#计算符合样式的列数。
-C<显示行数> --context=<显示行数>或-<显示行数>
#除了显示符合样式的那一行之外,并显示该行之前后的内容。
-d <动作> --directories=<动作>
#当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
-e<范本样式> --regexp=<范本样式>
#指定字符串做为查找文件内容的样式。
-E --extended-regexp
#将样式为延伸的普通表示法来使用。
-f<规则文件> --file=<规则文件>
#指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
-F --fixed-regexp
#将样式视为固定字符串的列表。
-G --basic-regexp
#将样式视为普通的表示法来使用。
-h --no-filename
#在显示符合样式的那一行之前,不标示该行所属的文件名称。
-H --with-filename
#在显示符合样式的那一行之前,表示该行所属的文件名称。
-i --ignore-case
#忽略字符大小写的差别。
-l --file-with-matches
#列出文件内容符合指定的样式的文件名称。
-L --files-without-match
#列出文件内容不符合指定的样式的文件名称。
-n --line-number
#在显示符合样式的那一行之前,标示出该行的列数编号。
-q --quiet或--silent
#不显示任何信息。
-r --recursive
#此参数的效果和指定“-d recurse”参数相同。
-s --no-messages
#不显示错误信息。
-v --revert-match
#显示不包含匹配文本的所有行。
-V --version
#显示版本信息。
-w --word-regexp
#只显示全字符合的列。
-x --line-regexp
#只显示全列符合的列。
-y
此参数的效果和指定“-i”参数相同。
cut 从每个文件中剪切出每行的选定部分
cut -b list [-n] [file ...]
cut -c list [file ...]
cut -f list [-d delim] [-s] [file ...]
$ cut -c-10 tmp.txt #cut tmp.txt文件的前10列
$ cut -c3-5 tmp.txt #cut tmp.txt文件的第3到5列
$ cut -c3- tmp.txt #cut tmp.txt文件的第3到结尾列
-b
:仅显示行中指定直接范围的内容;
-c
:仅显示行中指定范围的字符;
-d
:指定字段的分隔符,默认的字段分隔符为“TAB”;
-f
:显示指定字段的内容;
-n
:与“-b”选项连用,不分割多字节字符;
--complement
:补足被选择的字节、字符或字段;
--out-delimiter=<字段分隔符>
:指定输出内容是的字段分割符;
diff 比较两个文件的不同
diff [OPTION]... FILES
$ diff testA.txt testB.txt
-b或–ignore-space-change 不检查空格字符的不同。
-B或–ignore-blank-lines 不检查空白行。
-c 显示全部内文,并标出不同之处。
-C或–context 与执行"-c-"指令相同。
-d或–minimal 使用不同的演算法,以较小的单位来做比较。
-D或ifdef 此参数的输出格式可用于前置处理器巨集。
-e或–ed 此参数的输出格式可用于ed的script文件。
-f或-forward-ed 输出的格式类似ed的script文件,但按照原来文件的顺序来显示不同处。
-H或–speed-large-files 比较大文件时,可加快速度。
-l或–ignore-matching-lines 若两个文件在某几行有所不同,而这几行同时都包含了选项中指定的字符或字符串,则不显示这两个文件的差异。
-i或–ignore-case 不检查大小写的不同。
-l或–paginate 将结果交由pr程序来分页。
-n或–rcs 将比较结果以RCS的格式来显示。
-N或–new-file 在比较目录时,若文件A仅出现在某个目录中,预设会显示:Only in目录:文件A若使用-N参数,则diff会将文件A与一个空白的文件比较。
-p 若比较的文件为C语言的程序码文件时,显示差异所在的函数名称。
-P或–unidirectional-new-file 与-N类似,但只有当第二个目录包含了一个第一个目录所没有的文件时,才会将这个文件与空白的文件做比较。
-q或–brief 仅显示有无差异,不显示详细的信息。
-r或–recursive 比较子目录中的文件。
-s或–report-identical-files 若没有发现任何差异,仍然显示信息。
-S或–starting-file 在比较目录时,从指定的文件开始比较。
-t或–expand-tabs 在输出时,将tab字符展开。
-T或–initial-tab 在每行前面加上tab字符以便对齐。
-u,-U或–unified= 以合并的方式来显示文件内容的不同。
-v或–version 显示版本信息。
-w或–ignore-all-space 忽略全部的空格字符。
-W或–width 在使用-y参数时,指定栏宽。
-x或–exclude 不比较选项中所指定的文件或目录。
-X或–exclude-from 您可以将文件或目录类型存成文本文件,然后在=中指定此文本文件。
-y或–side-by-side 以并列的方式显示文件的异同之处。
tar 压缩和解压文件
tar [bundled-flags <args>] [<file> | <pattern> ...]
tar {-c} [options] [files | directories]
tar {-r | -u} -f archive-file [options] [files | directories]
tar {-t | -x} [options] [patterns]
#打包 tar -cvf 包名 文件名
$ tar -cvf test.tar test.txt
#解包 tar -xvf 包名
$ tar -xvf test.tar
#压缩 tar -czvf 包名 文件名
$ tar -czvf test.tgz test.txt
#解压 tar -xzvf 包名
$ tar -xzvf test.tgz
-A
新增压缩文件到已存在的压缩
-B
设置区块大小
-c
建立新的压缩文件
-d
记录文件的差别
-r
添加文件到已经压缩的文件
-u
添加改变了和现有的文件到已经存在的压缩文件
-x
从压缩的文件中提取文件
-t
显示压缩文件的内容
-z
支持gzip解压文件
-j
支持bzip2解压文件
-Z
支持compress解压文件
-v
显示操作过程
-l
文件系统边界设置
-k
保留原有文件不覆盖
-m
保留文件不被覆盖
-W
确认压缩文件的正确性
-b
设置区块数目
-C
切换到指定目录
-f
指定压缩文件
du 查看目录和文件大小
du [-H | -L | -P] [-a | -s | -d depth] [-c] [-h | -k | -m | -g] [-x] [-I mask] [file ...]
#查看指定文件大小
$ du -h filename
#展示该目录下所有文件大小,大小以可读方式展示
$ du -h /
#展示当前目录大小
$ du -sh
#展示当前目录下每个目录大小
$ du -sh ./
#显示所有文件的大小,以可读方式展示
$ du -ah /
-a或-al
l 显示目录中个别文件的大小。
-b或-bytes
显示目录或文件大小时,以byte为单位。
-c或--total
除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
-k或--kilobytes
以KB(1024bytes)为单位输出。
-m或--megabytes
以MB为单位输出。
-s或--summarize
仅显示总计,只列出最后加总的值。
-h或--human-readable
以K,M,G为单位,提高信息的可读性。
-x或--one-file-xystem
以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-L<符号链接>或--dereference<符号链接>
显示选项中所指定符号链接的源文件大小。
-S或--separate-dirs
显示个别目录的大小时,并不含其子目录的大小。
-X<文件>或--exclude-from=<文件>
在<文件>指定目录或文件。
--exclude=<目录或文件>
略过指定的目录或文件。
-D或--dereference-args
显示指定符号链接的源文件大小。
-H或--si
与-h参数相同,但是K,M,G是以1000为换算单位。
-l或--count-links
重复计算硬件链接的文件。
df 展示当前系统磁盘使用情况
df [-b | -h | -H | -k | -m | -g | -P] [-ailn] [-t] [-T type] [file | filesystem ...]
#展示当前系统磁盘使用情况,以可读的方式展示
$ df -h
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
/dev/disk1s1 234Gi 78Gi 151Gi 35% 1376436 9223372036853399371 0% /
devfs 208Ki 208Ki 0Bi 100% 720 0 100% /dev
/dev/disk1s4 234Gi 4.0Gi 151Gi 3% 4 9223372036854775803 0% /private/var/vm
map -hosts 0Bi 0Bi 0Bi 100% 0 0 100% /net
map auto_home 0Bi 0Bi 0Bi 100% 0 0 100% /home
/dev/disk3s1 290Mi 271Mi 17Mi 94% 2156 9223372036854773651 0% /Volumes/Sourcetrail_2019_4_102
-a
全部文件系统列表
-h
方便阅读方式显示
-H
等于“-h”,但是计算式,1K=1000,而不是1K=1024
-i
显示inode信息
-k
区块为1024字节
-l
只显示本地文件系统
-m
区块为1048576字节
--no-sync
忽略 sync 命令
-P
输出格式为POSIX
--sync
在取得磁盘信息前,先执行sync命令
-T
文件系统类型
--block-size=<区块大小>
指定区块大小
-t<文件系统类型>
只显示选定文件系统的磁盘信息
-x<文件系统类型>
不显示选定文件系统的磁盘信息
lsof 显示当前系统打开的文件
#显示当前系统打开的文件
$ lsof
#查看某个文件的相关进程 lsof 文件名
$ lsof /bin/bash
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 9430 midou txt REG 253,1 960392 140072 /usr/bin/bash
#查看某个用户打开的文件信息
$ lsof -u username
#列出某个程序进程所打开的文件信息
$ lsof -c java
#列出除了某个用户外的被打开的文件信息
$ lsof -u ^midou
#通过某个进程号显示该进行打开的文件
$ lsof -p pid
#列出除了某个进程号,其他进程号所打开的文件信息
$ lsof -p ^pid
#列出所有的网络连接
$ lsof -i
#列出所有tcp 网络连接信息
$ lsof -i tcp
#列出所有udp网络连接信息
$ lsof -i udp
#列出谁在某个端口使用情况
$ lsof -i :port
#特定的tcp端口
$ lsof -i tcp:port
#特定的udp端口
$ lsof -i udp:port
#列出某个用户的所有活跃的网络端口
$ lsof -a -u username -i
#根据文件描述符范围列出文件信息
$ lsof -d 0-2
-a
列出打开文件存在的进程
-c<进程名>
列出指定进程所打开的文件
-g
列出GID号进程详情
-d<文件号>
列出占用该文件号的进程
+d<目录>
列出目录下被打开的文件
+D<目录>
递归列出目录下被打开的文件
-n<目录>
列出使用NFS的文件
-i<条件>
列出符合条件的进程。(4、6、协议、:端口、 @ip )
-p<进程号>
列出指定进程号所打开的文件
-u
列出UID号进程详情
lsof常用参数示例
lsof输出各列信息的意义如下:
COMMAND
:进程的名称
PID
:进程标识符
PPID
:父进程标识符(需要指定-R参数)
USER
:进程所有者
PGID
:进程所属组
FD
:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
ping 将ICMP ECHO_REQUEST数据包发送到网络主机
ping [-AaCDdfnoQqRrv] [-b boundif] [-c count] [-G sweepmaxsize] [-g sweepminsize] [-h sweepincrsize] [-i wait] [-k trafficclass] [-K netservicetype][-l preload] [-M mask | time] [-m ttl] [-P policy] [-p pattern] [-S src_addr] [-s packetsize] [-t timeout] [-W waittime] [-z tos] [--apple-connect][--apple-time] host
#检测网络情况
$ ping host
#ping网关
$ ping -b host
#ping指定次数
$ ping -c 10 host
#ping指定时间间隔和次数限制
$ ping -c 10 -i 0.5 host
#通过域名ping公网上的站点
-d
使用Socket的SO_DEBUG功能。
-f
极限检测。大量且快速地送网络封包给一台机器,看它的回应。
-n
只输出数值。
-q
不显示任何传送封包的信息,只显示最后的结果。
-r
忽略普通的Routing Table,直接将数据包送到远端主机上。通常是查看本机的网络接口是否有问题。
-R
记录路由过程。
-v
详细显示指令的执行过程。
-c
数目:在发送指定数目的包后停止。
-i
秒数:设定间隔几秒送一个网络封包给一台机器,预设值是一秒送一次。
-I
网络界面:使用指定的网络界面送出数据包。
-l
前置载入:设置在送出要求信息之前,先行发出的数据包。
-p
范本样式:设置填满数据包的范本样式。
-s
字节数:指定发送的数据字节数,预设值是56,加上8字节的ICMP头,一共是64ICMP数据字节。
-t
存活数值:设置存活数值TTL的大小。
netstat 查看端口使用情况
#列出所有端口使用情况
$ netstat -a
#显示当前UDP连接状况
$ netstat -nu
#显示UDP端口号的使用情况
$ netstat -apu
#显示网卡列表
$ netstat -i
#显示网络统计信息
$ netstat -s
#显示监听的套接口
$ netstat -l
#显示所有已建立的有效连接
$ netstat -n
#显示关于路由表的信息
$ netstat -r
#列出所有 tcp 端口
$ netstat -at
#找出程序运行的端口
$ netstat -ap | grep ssh
#在 netstat 输出中显示 PID 和进程名称
$ netstat -pt
-a
或–all 显示所有连线中的Socket。
-A<网络类型>
或–<网络类型> 列出该网络类型连线中的相关地址。
-c
或–continuous 持续列出网络状态。
-C
或–cache 显示路由器配置的快取信息。
-e
或–extend 显示网络其他相关信息。
-F
或–fib 显示FIB。
-g
或–groups 显示多重广播功能群组组员名单。
-h
或–help 在线帮助。
-i
或–interfaces 显示网络界面信息表单。
-l
或–listening 显示监控中的服务器的Socket。
-M
或–masquerade 显示伪装的网络连线。
-n
或–numeric 直接使用IP地址,而不通过域名服务器。
-N
或–netlink或–symbolic 显示网络硬件外围设备的符号连接名称。
-o
或–timers 显示计时器。
-p
或–programs 显示正在使用Socket的程序识别码和程序名称。
-r
或–route 显示Routing Table。
-s
或–statistice 显示网络工作信息统计表。
-t
或–tcp 显示TCP传输协议的连线状况。
-u
或–udp 显示UDP传输协议的连线状况。
-v
或–verbose 显示指令执行过程。
-V
或–version 显示版本信息。
-w
或–raw 显示RAW传输协议的连线状况。
-x
或–unix 此参数的效果和指定”-A unix”参数相同。
–ip
或–inet 此参数的效果和指定”-A inet”参数相同。
ifconfig 显示网络设备信息
#显示网络设备信息
$ ifconfig
#启动关闭指定网卡
$ ifconfig eth0 up
$ ifconfig eth0 down
#配置IP地址
$ ifconfig eth0 ip
#启用和关闭ARP协议
$ ifconfig eth0 arp
$ ifconfig eth0 -arp
#设置最大传输单元
$ ifconfig eth0 mtu 1500
up
启动指定网络设备/网卡。
down
关闭指定网络设备/网卡。该参数可以有效地阻止通过指定接口的IP信息流,如果想永久地关闭一个接口,我们还需要从核心路由表中将该接口的路由信息全部删除。
arp
设置指定网卡是否支持ARP协议。
-promisc
设置是否支持网卡的promiscuous模式,如果选择此参数,网卡将接收网络中发给它所有的数据包
-allmulti
设置是否支持多播模式,如果选择此参数,网卡将接收网络中所有的多播数据包
-a
显示全部接口信息
-s
显示摘要信息(类似于 netstat -i)
add
给指定网卡配置IPv6地址
del
删除指定网卡的IPv6地址
<硬件地址>
配置网卡最大的传输单元
mtu<字节数>
设置网卡的最大传输单元 (bytes)
netmask<子网掩码>
设置网卡的子网掩码。掩码可以是有前缀0x的32位十六进制数,也可以是用点分开的4个十进制数。如果不打算将网络分成子网,可以不管这一选项;如果要使用子网,那么请记住,网络中每一个系统必须有相同子网掩码。
tunel
建立隧道
dstaddr
设定一个远端地址,建立点对点通信
-broadcast<地址>
为指定网卡设置广播协议
-pointtopoint<地址>
为网卡设置点对点通讯协议
multicast
为网卡设置组播标志
address
为网卡设置IPv4地址
txqueuelen<长度>
为网卡设置传输列队的长度
hostname 显示系统的DNS名称,并显示或设置其主机名或NIS域名
#查看主机ip,这个命令我最推荐的一个用法就是查看主机ip,之前我一直用ifconfig
$ hostname -i
-v
:详细信息模式;
-a
:显示主机别名;
-d
:显示DNS域名;
-f
:显示FQDN名称;
-i
:显示主机的ip地址;
-s
:显示短主机名称,在第一个点处截断;
-y
:显示NIS域名。
traceroute 跟踪从IP网络获取到给定主机的路由信息包
#traceroute 一下百度,看下数据包的路由途径
$ traceroute www.baidu.com
traceroute: Warning: www.baidu.com has multiple addresses; using 183.232.231.172
traceroute to www.baidu.com (183.232.231.172), 64 hops max, 52 byte packets
1 192.168.0.1 (192.168.0.1) 6.059 ms 0.879 ms 0.843 ms
2 192.168.1.1 (192.168.1.1) 1.305 ms 2.232 ms 2.167 ms
3 10.104.0.1 (10.104.0.1) 5.085 ms 5.534 ms 4.466 ms
4 221.131.253.13 (221.131.253.13) 4.633 ms 11.736 ms 4.199 ms
5 117.148.181.1 (117.148.181.1) 4.544 ms *
112.11.233.49 (112.11.233.49) 13.384 ms
6 221.183.47.165 (221.183.47.165) 6.591 ms 6.643 ms
221.183.47.161 (221.183.47.161) 5.591 ms
7 * 221.183.40.225 (221.183.40.225) 27.242 ms 25.222 ms
8 221.183.59.154 (221.183.59.154) 27.937 ms 27.501 ms 26.869 ms
9 120.241.49.198 (120.241.49.198) 60.772 ms
120.241.49.30 (120.241.49.30) 33.451 ms
120.241.48.190 (120.241.48.190) 45.563 ms
10 * * *
11 * * *
12 * * *
13 * * *
14 * * *
15 * * *
16 * * *
-d
使用Socket层级的排错功能。
-f
设置第一个检测数据包的存活数值TTL的大小。
-F
设置勿离断位。
-g
设置来源路由网关,最多可设置8个。
-i
使用指定的网络界面送出数据包。
-I
使用ICMP回应取代UDP资料信息。
-m
设置检测数据包的最大存活数值TTL的大小。
-n
直接使用IP地址而非主机名称。
-p
设置UDP传输协议的通信端口。
-r
忽略普通的Routing Table,直接将数据包送到远端主机上。
-s
设置本地主机送出数据包的IP地址。
-t
设置检测数据包的TOS数值。
-v
详细显示指令的执行过程。
-w
设置等待远端主机回报的时间。
-x
开启或关闭数据包的正确性检验。
route 操纵内核的IP路由表
#显示当前路由
$ route
#屏蔽一条路由
$ route add -net 224.0.0.0 netmask 240.0.0.0 reject
#删除路由记录
$ route del -net 224.0.0.0 netmask 240.0.0.0
#删除和添加设置默认网关
$ route del default gw 192.168.0.100
$ route add default gw 192.168.0.100
-c
显示更多信息
-n
不解析名字
-v
显示详细的处理信息
-F
显示发送信息
-C
显示路由缓存
-f
清除所有网关入口的路由表。
-p
与 add 命令一起使用时使路由具有永久性。
add
:添加一条新路由。
del
:删除一条路由。
-net
:目标地址是一个网络。
-host
:目标地址是一个主机。
wget 从Web非交互式下载文件
wget [option]... [URL]...
#下载某个文件,wget 文件的地址
$ wget https://blog.csdn.net/Chill_Lyn
启动:
-V, --version 显示 Wget 的版本信息并退出。
-h, --help 打印此帮助。
-b, --background 启动后转入后台。
-e, --execute=COMMAND 运行一个“.wgetrc”风格的命令。
日志和输入文件:
-o, --output-file=FILE 将日志信息写入 FILE。
-a, --append-output=FILE 将信息添加至 FILE。
-d, --debug 打印大量调试信息。
-q, --quiet 安静模式 (无信息输出)。
-v, --verbose 详尽的输出 (此为默认值)。
-nv, --no-verbose 关闭详尽输出,但不进入安静模式。
-i, --input-file=FILE 下载本地或外部 FILE 中的 URLs。
-F, --force-html 把输入文件当成 HTML 文件。
-B, --base=URL 解析与 URL 相关的
HTML 输入文件 (由 -i -F 选项指定)。
--config=FILE Specify config file to use.
下载:
-t, --tries=NUMBER 设置重试次数为 NUMBER (0 代表无限制)。
--retry-connrefused 即使拒绝连接也是重试。
-O, --output-document=FILE 将文档写入 FILE。
-nc, --no-clobber skip downloads that would download to
existing files (overwriting them).
-c, --continue 断点续传下载文件。
--progress=TYPE 选择进度条类型。
-N, --timestamping 只获取比本地文件新的文件。
--no-use-server-timestamps 不用服务器上的时间戳来设置本地文件。
-S, --server-response 打印服务器响应。
--spider 不下载任何文件。
-T, --timeout=SECONDS 将所有超时设为 SECONDS 秒。
--dns-timeout=SECS 设置 DNS 查寻超时为 SECS 秒。
--connect-timeout=SECS 设置连接超时为 SECS 秒。
--read-timeout=SECS 设置读取超时为 SECS 秒。
-w, --wait=SECONDS 等待间隔为 SECONDS 秒。
--waitretry=SECONDS 在获取文件的重试期间等待 1..SECONDS 秒。
--random-wait 获取多个文件时,每次随机等待间隔
0.5*WAIT...1.5*WAIT 秒。
--no-proxy 禁止使用代理。
-Q, --quota=NUMBER 设置获取配额为 NUMBER 字节。
--bind-address=ADDRESS 绑定至本地主机上的 ADDRESS (主机名或是 IP)。
--limit-rate=RATE 限制下载速率为 RATE。
--no-dns-cache 关闭 DNS 查寻缓存。
--restrict-file-names=OS 限定文件名中的字符为 OS 允许的字符。
--ignore-case 匹配文件/目录时忽略大小写。
-4, --inet4-only 仅连接至 IPv4 地址。
-6, --inet6-only 仅连接至 IPv6 地址。
--prefer-family=FAMILY 首先连接至指定协议的地址
FAMILY 为 IPv6,IPv4 或是 none。
--user=USER 将 ftp 和 http 的用户名均设置为 USER。
--password=PASS 将 ftp 和 http 的密码均设置为 PASS。
--ask-password 提示输入密码。
--no-iri 关闭 IRI 支持。
--local-encoding=ENC IRI (国际化资源标识符) 使用 ENC 作为本地编码。
--remote-encoding=ENC 使用 ENC 作为默认远程编码。
--unlink remove file before clobber.
目录:
-nd, --no-directories 不创建目录。
-x, --force-directories 强制创建目录。
-nH, --no-host-directories 不要创建主目录。
--protocol-directories 在目录中使用协议名称。
-P, --directory-prefix=PREFIX 以 PREFIX/... 保存文件
--cut-dirs=NUMBER 忽略远程目录中 NUMBER 个目录层。
HTTP 选项:
--http-user=USER 设置 http 用户名为 USER。
--http-password=PASS 设置 http 密码为 PASS。
--no-cache 不在服务器上缓存数据。
--default-page=NAME 改变默认页
(默认页通常是“index.html”)。
-E, --adjust-extension 以合适的扩展名保存 HTML/CSS 文档。
--ignore-length 忽略头部的‘Content-Length’区域。
--header=STRING 在头部插入 STRING。
--max-redirect 每页所允许的最大重定向。
--proxy-user=USER 使用 USER 作为代理用户名。
--proxy-password=PASS 使用 PASS 作为代理密码。
--referer=URL 在 HTTP 请求头包含‘Referer: URL’。
--save-headers 将 HTTP 头保存至文件。
-U, --user-agent=AGENT 标识为 AGENT 而不是 Wget/VERSION。
--no-http-keep-alive 禁用 HTTP keep-alive (永久连接)。
--no-cookies 不使用 cookies。
--load-cookies=FILE 会话开始前从 FILE 中载入 cookies。
--save-cookies=FILE 会话结束后保存 cookies 至 FILE。
--keep-session-cookies 载入并保存会话 (非永久) cookies。
--post-data=STRING 使用 POST 方式;把 STRING 作为数据发送。
--post-file=FILE 使用 POST 方式;发送 FILE 内容。
--content-disposition 当选中本地文件名时
允许 Content-Disposition 头部 (尚在实验)。
--auth-no-challenge 发送不含服务器询问的首次等待
的基本 HTTP 验证信息。
HTTPS (SSL/TLS) 选项:
--secure-protocol=PR 选择安全协议,可以是 auto、SSLv2、
SSLv3 或是 TLSv1 中的一个。
--no-check-certificate 不要验证服务器的证书。
--certificate=FILE 客户端证书文件。
--certificate-type=TYPE 客户端证书类型,PEM 或 DER。
--private-key=FILE 私钥文件。
--private-key-type=TYPE 私钥文件类型,PEM 或 DER。
--ca-certificate=FILE 带有一组 CA 认证的文件。
--ca-directory=DIR 保存 CA 认证的哈希列表的目录。
--random-file=FILE 带有生成 SSL PRNG 的随机数据的文件。
--egd-file=FILE 用于命名带有随机数据的 EGD 套接字的文件。
FTP 选项:
--ftp-user=USER 设置 ftp 用户名为 USER。
--ftp-password=PASS 设置 ftp 密码为 PASS。
--no-remove-listing 不要删除‘.listing’文件。
--no-glob 不在 FTP 文件名中使用通配符展开。
--no-passive-ftp 禁用“passive”传输模式。
--retr-symlinks 递归目录时,获取链接的文件 (而非目录)。
递归下载:
-r, --recursive 指定递归下载。
-l, --level=NUMBER 最大递归深度 (inf 或 0 代表无限制,即全部下载)。
--delete-after 下载完成后删除本地文件。
-k, --convert-links 让下载得到的 HTML 或 CSS 中的链接指向本地文件。
-K, --backup-converted 在转换文件 X 前先将它备份为 X.orig。
-m, --mirror -N -r -l inf --no-remove-listing 的缩写形式。
-p, --page-requisites 下载所有用于显示 HTML 页面的图片之类的元素。
--strict-comments 用严格方式 (SGML) 处理 HTML 注释。
递归接受/拒绝:
-A, --accept=LIST 逗号分隔的可接受的扩展名列表。
-R, --reject=LIST 逗号分隔的要拒绝的扩展名列表。
-D, --domains=LIST 逗号分隔的可接受的域列表。
--exclude-domains=LIST 逗号分隔的要拒绝的域列表。
--follow-ftp 跟踪 HTML 文档中的 FTP 链接。
--follow-tags=LIST 逗号分隔的跟踪的 HTML 标识列表。
--ignore-tags=LIST 逗号分隔的忽略的 HTML 标识列表。
-H, --span-hosts 递归时转向外部主机。
-L, --relative 只跟踪有关系的链接。
-I, --include-directories=LIST 允许目录的列表。
--trust-server-names use the name specified by the redirection
url last component.
-X, --exclude-directories=LIST 排除目录的列表。
-np, --no-parent 不追溯至父目录。
vmstat 显示有关进程,内存,页面调度,块IO,陷阱,磁盘和cpu活动的信息
#显示虚拟内存情况
$ vmstat
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 23764228 507816 36953948 0 0 3 5 0 0 1 0 98 0 0
Procs(进程):
r: 运行队列中进程数量
b: 等待IO的进程数量
Memory(内存):
swpd: 使用虚拟内存大小
free: 可用内存大小
buff: 用作缓冲的内存大小
cache: 用作缓存的内存大小
Swap:
si: 每秒从交换区写到内存的大小
so: 每秒写入交换区的内存大小
IO:(现在的Linux版本块的大小为1024bytes)
bi: 每秒读取的块数
bo: 每秒写入的块数
系统:
in: 每秒中断数,包括时钟中断。
cs: 每秒上下文切换数。
CPU(以百分比表示):
us: 用户进程执行时间(user time)
sy: 系统进程执行时间(system time)
id: 空闲时间(包括IO等待时间),中央处理器的空闲时间 。以百分比表示。
wa: 等待IO时间
#表示在3秒时间内进行3次采样。将得到一个数据汇总他能够反映真正的系统情况。
$ vmstat 3 3
#查看系统fork多少次
$ vmstat -f
166484246 forks
#查看内存使用的详细信息
$ vmstat -s
#查看磁盘的读/写
$ vmstat -d
#查看系统的slab信息
$ vmstat -m
free 显示内存使用情况
#显示内存使用情况
$ free
total used free shared buff/cache available
Mem: 65808884 4582700 23754736 684 37471448 60913052
$ free -h
total used free shared buff/cache available
Mem: 62G 4.4G 22G 684K 35G 58G
Swap: 0B 0B 0B
total:总计物理内存的大小。
used:已使用多大。
free:可用有多少。
Shared:多个进程共享的内存总额。
Buffers/cached:磁盘缓存的大小。
第三行(-/+ buffers/cached):
used:已使用多大。
free:可用有多少。
#周期性的查询内存使用信息,5s执行一次
$ free -s 5
-b 以Byte为单位显示内存使用情况。
-k 以KB为单位显示内存使用情况。
-m 以MB为单位显示内存使用情况。
-g 以GB为单位显示内存使用情况。
-o 不显示缓冲区调节列。
-s<间隔秒数> 持续观察内存使用状况。
-t 显示内存总和列。
top 提供正在运行的系统的动态实时视图
#top
$ top
top - 00:56:07 up 149 days, 14:40, 1 user, load average: 0.00, 0.02, 0.05
Tasks: 254 total, 1 running, 253 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.4 us, 0.3 sy, 0.0 ni, 98.3 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 65808884 total, 23749772 free, 4586160 used, 37472952 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 60909608 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
24397 dongshan 20 0 17.972g 688312 13728 S 6.2 1.0 7:09.11 java
1 root 20 0 42140 3684 1476 S 0.0 0.0 23:58.88 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:05.47 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:16.06 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 1:27.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/0
第一行,任务队列信息,同 uptime 命令的执行结果,具体参数说明情况如下:
00:56:07 — 当前系统时间
up 149 days, 14:40 — 系统已经运行了149天14小时40分钟(在这期间系统没有重启过的)
1 users — 当前有1个用户登录系统
load average: 0.00, 0.02, 0.05 — load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。
load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。
第二行,Tasks — 任务(进程)
系统现在共有254个进程,其中处于运行中的有1个,253个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。
第三行,cpu状态信息
%Cpu(s): 1.4 us, 0.3 sy, 0.0 ni, 98.3 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
1.4 us — 用户空间占用CPU的百分比。
0.3 sy — 内核空间占用CPU的百分比。
0.0 ni — 改变过优先级的进程占用CPU的百分比
98.3 id — 空闲CPU百分比
0.1 wa — IO等待占用CPU的百分比
0.0 hi — 硬中断(Hardware IRQ)占用CPU的百分比
0.0 si — 软中断(Software Interrupts)占用CPU的百分比
第四行,内存状态
65808884 total 物理内存总量
23749772 free 使用中的内存总量
4586160 used 空闲内存总量
37472952 buff/cache 缓存的内存量
第五行,swap交换分区信息
0 total 交换区总量
0 use 使用的交换区总量
0 free 空闲交换区总量
60909608 avail Mem 可用交换区总量
第七行以下:各进程(任务)的状态监控
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 — 进程名称(命令名/命令行)
查找哪个线程使用CPU最长
这是一个比较偏实践的问题,这种问题我觉得挺有意义的。可以这么做:
(1)获取项目的pid,jps或者ps -ef | grep java
(2)top -H -p pid,顺序不能改变
这样就可以打印出当前的项目,每条线程占用CPU时间的百分比。注意这里打出的是LWP,也就是操作系统原生线程的线程号。
使用"top -H -p pid"+"jps pid"可以很容易地找到某条占用CPU高的线程的线程堆栈,从而定位占用CPU高的原因,一般是因为不当的代码操作导致了死循环。
最后提一点,"top -H -p pid"打出来的LWP是十进制的,"jps pid"打出来的本地线程号是十六进制的,转换一下,就能定位到占用CPU高的线程的当前线程堆栈了。
sar 系统活动情况报告
-A:所有报告的总和
-u:输出CPU使用情况的统计信息
-v:输出inode、文件和其他内核表的统计信息
-d:输出每一个块设备的活动信息
-r:输出内存和交换空间的统计信息
-b:显示I/O和传送速率的统计信息
-a:文件读写情况
-c:输出进程统计信息,每秒创建的进程数
-R:输出内存页面的统计信息
-y:终端设备活动情况
-w:输出系统交换活动信息