linux常用指令
抓包常用指令
tcpdump host 192.168.3.302 and port 8090 -w test8090.cap
查看端口占用netstat -ntlp(周末学习一下这几个参数意思)
句柄数查看lsof -p 123|wc -l:有些进程高并发下,需要修改进程句柄最大数:http://blog.51cto.com/12824426/2060594
这篇博客对于句柄参数的关系说明的很好,有些文件vim下无法改变 echo > 文件目录,可以修改
ulimit -a可以查看当前用户的资源限制,通过ulimit -x x修改的,关闭该控制台后即消失
查看限制情况 ulimit -a
可以看到如下信息
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
pending signals (-i) 1024
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 4096
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
而我们需要修改的是open files (-n) 1024的值
于是命令就是limit -n 2048(随各自需要设置)
-----------------------------------------------------------------------------------
功能说明:控制shell程序的资源。
语 法:ulimit [-aHS][-c <core文件上限>][-d <数据节区大小>][-f <文件大小>][-m <内存大小>][-n <文件数目>][-p <缓冲区大小>][-s <堆叠大小>][-t <CPU时间>][-u <程序数目>][-v <虚拟内存大小>]
补充说明:ulimit为shell内建指令,可用来控制shell执行程序的资源。
参 数:
-a 显示目前资源限制的设定。
-c <core文件上限> 设定core文件的最大值,单位为区块。
-d <数据节区大小> 程序数据节区的最大值,单位为KB。
-f <文件大小> shell所能建立的最大文件,单位为区块。
-H 设定资源的硬性限制,也就是管理员所设下的限制。
-m <内存大小> 指定可使用内存的上限,单位为KB。
-n <文件数目> 指定同一时间最多可开启的文件数。
-p <缓冲区大小> 指定管道缓冲区的大小,单位512字节。
-s <堆叠大小> 指定堆叠的上限,单位为KB。
-S 设定资源的弹性限制。
-t <CPU时间> 指定CPU使用时间的上限,单位为秒。
-u <程序数目> 用户最多可开启的程序数目。
-v <虚拟内存大小> 指定可使用的虚拟内存上限,单位为KB。
--------------------- 本文来自 摘取天上星 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/zqtsx/article/details/24383755?utm_source=copy
top命令 free-h
top -H p pid查询jvm进程中各个线程占用的系统资源;
关闭客户端仍有效的启动jar nohup java -jar xxx.jar >name.log &
linux查看java jdk安装路径和设置环境变量
https://blog.csdn.net/stpeace/article/details/79411223
linux:
echo $PATH
查找文件
linux下的find文件查找命令与grep文件内容查找命令
linux下的find文件查找命令与grep文件内容查找命令
在使用linux时,经常需要进行文件查找。其中查找的命令主要有find和grep。两个命令是有区的。
区别:(1)find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间等。
(2)grep是根据文件的内容进行查找,会对文件的每一行按照给定的模式(patter)进行匹配查找。
一.find命令
基本格式:find path expression
1.按照文件名查找
(1)find / -name httpd.conf #在根目录下查找文件httpd.conf,表示在整个硬盘查找
(2)find /etc -name httpd.conf #在/etc目录下文件httpd.conf
(3)find /etc -name '*srm*' #使用通配符*(0或者任意多个)。表示在/etc目录下查找文件名中含有字符串‘srm’的文件
(4)find . -name 'srm*' #表示当前目录下查找文件名开头是字符串‘srm’的文件
2.按照文件特征查找
(1)find / -amin -10 # 查找在系统中最后10分钟访问的文件(access time)
(2)find / -atime -2 # 查找在系统中最后48小时访问的文件
(3)find / -empty # 查找在系统中为空的文件或者文件夹
(4)find / -group cat # 查找在系统中属于 group为cat的文件
(5)find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件(modify time)
(6)find / -mtime -1 #查找在系统中最后24小时里修改过的文件
(7)find / -user fred #查找在系统中属于fred这个用户的文件
(8)find / -size +10000c #查找出大于10000000字节的文件(c:字节,w:双字,k:KB,M:MB,G:GB)
(9)find / -size -1000k #查找出小于1000KB的文件
3.使用混合查找方式查找文件
参数有: !,-and(-a),-or(-o)。
(1)find /tmp -size +10000c -and -mtime +2 #在/tmp目录下查找大于10000字节并在最后2分钟内修改的文件
(2)find / -user fred -or -user george #在/目录下查找用户是fred或者george的文件文件
(3)find /tmp ! -user panda #在/tmp目录中查找所有不属于panda用户的文件
二、grep命令
基本格式:find expression
1.主要参数
[options]主要参数:
-c:只输出匹配行的计数。
-i:不区分大小写
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
pattern正则表达式主要参数:
\: 忽略正则表达式中特殊字符的原有含义。
^:匹配正则表达式的开始行。
$: 匹配正则表达式的结束行。
\<:从匹配正则表达 式的行开始。
\>:到匹配正则表达式的行结束。
[ ]:单个字符,如[A]即A符合要求 。
[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
.:所有的单个字符。
* :有字符,长度可以为0。
2.实例
(1)grep 'test' d* #显示所有以d开头的文件中包含 test的行
(2)grep ‘test’ aa bb cc #显示在aa,bb,cc文件中包含test的行
(3)grep ‘[a-z]\{5\}’ aa #显示所有包含每行字符串至少有5个连续小写字符的字符串的行
(4)grep magic /usr/src #显示/usr/src目录下的文件(不含子目录)包含magic的行
(5)grep -r magic /usr/src #显示/usr/src目录下的文件(包含子目录)包含magic的行
(6)grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’),
详细使用参见:http://www.cnblogs.com/end/archive/2012/02/21/2360965.html
Linux允许打开最大文件句柄数的参数调优-"too many open files"问题
都知道Linux系统的特性,一切皆文件,所以在运行zabbix这样的服务时,其中重要的一个调优就是调整linux系统的最大文件句柄数,解决“too many open files”的问题,增大程序运行允许打开的文件数,提高性能。
一.查看系统运行打开的文件句柄数
# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 7179
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 7179
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
在默认情况下,open files参数为1024,就是linux允许打开的最大文件数。当运行的服务需要大并发进程运行时,这显然是不够的,就会报出“too many open files”。在使用zabbix的过程中,当增大开起的进程数后会出现无法启动的情况,产看日志会有类似的报错,此时就需要修改最大文件句柄数。
二.修改最大文件句柄数-临时修改
# ulimit -n 2048
# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 7179
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 2048
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 7179
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
可以看到open files参数调整到了2048,这种修改方式只对当前进程有效。若重新打开一个终端或是重启进程,这个参数都不会生效,所以不建议这样使用。
三.修改最大文件句柄数-内核参数修改
在设置前,我们一定要考虑到系统的限制,如果你修改的参数超过了系统默认值的限制,会带来另一个悲剧的,此坑踩过。
(1)系统默认的最大值
file-max是内核可分配的最大文件数
# cat /proc/sys/fs/file-max
181044
nr_open是单个进程可分配的最大文件数
# cat /proc/sys/fs/nr_open
1048576
一般系统默认内核可分配的最大文件数是内存的10%左右,可以调整到50%左右。
# grep MemTotal /proc/meminfo |awk '{printf("%d",$2/10)}'
186726
(2)调整最大值
修改两个内核文件中允许的最大值,需要注意的是nr_open中的参数要小于file-max中的参数。
系统允许的最大值调整为内存的50%。
# grep MemTotal /proc/meminfo |awk '{printf("%d",$2/2)}'
933632
# echo 933632 > /proc/sys/fs/file-max
单个进程可分配的最大值适当增大。
# echo 233632 > /proc/sys/fs/nr_open
(3)修改系统内核参数
# vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
# vim /etc/security/limits.d/20-nproc.conf
* soft nproc 65535
* hard nproc 65535
这里的“*”号表示对所有用户生效,可以设置指定的用户,修改后保存退出,带看一个新的终端就可生效了。
(4)总结
a.所有进程打开的文件描述符数不能超过/proc/sys/fs/file-max
b.单个进程打开的文件描述符数不能超过user limit中nofile的soft limit
c.nofile的soft limit不能超过其hard limit
d. nofile的hard limit不能超过/proc/sys/fs/nr_open
(5)特别提醒
有一种意外情况,如果没有注意修改系统默认允许的最大值,在limits.conf中设置的参数大于系统默认值,退出终端后,你会发现ssh无法链接的悲剧,此时如果你还有未关闭的终端链接,那恭喜你还有拯救的余地,修改sshd的配置文件。
# vim /etc/ssh/sshd_config
UsePAM yes 将这里的yes改为no
重启sshd服务#systemctl restart sshd.service
此时可以链接终端了,调整系统内核允许的最大值,再改回sshd的配置。
四.关于打开文件的查看命令
(1)查看所有进程的文件打开数
# lsof |wc -l
(2)查看整个系统目前使用的文件句柄数
# cat /proc/sys/fs/file-nr
(3)查看某个进程开的进程
#lsof -p pid
(4)查看某个进程的的文件句柄数
#lsof -p pid|wc -l
(5)查看某个目录,文件被什么进程占用
#lsof path(file)
linux如何查看端口被哪个进程占用?
1、lsof -i:端口号
2、netstat -tunlp|grep 端口号
都可以查看指定端口被哪个进程占用的情况
方法/步骤
-
【步骤一】lsof -i
lsof -i 用以显示符合条件的进程情况,lsof(list open files)是一个列出当前系统打开文件的工具。以root用户来执行lsof -i命令,如下图
-
【步骤二】lsof -i:端口号
lsof -i:端口号,用于查看某一端口的占用情况,比如查看22号端口使用情况,lsof -i:22,如下图
-
【步骤三】netstat -tunlp
netstat -tunlp用于显示tcp,udp的端口和进程等相关情况,如下图
-
【步骤四】netstat -tunlp|grep 端口号
netstat -tunlp|grep 端口号,用于查看指定端口号的进程情况,如查看22端口的情况,netstat -tunlp|grep 22,如下图
查看tcp连接各种状态数量netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'
shell> netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}' TIME_WAIT 250263 CLOSE_WAIT 57 FIN_WAIT2 3 ESTABLISHED 2463 SYN_RECV 8
#!/bin/bash set -e command 1 command 2 ... exit 0 ---------------------------------------------------------- Every script you write should include set -e at the top. This tells bash that it should exit the script if any statement returns a non-true return value. The benefit of using -e is that it prevents errors snowballing into serious issues when they could have been caught earlier. Again, for readability you may want to use set -o errexit.
你写的每个脚本都应该在文件开头加上set -e,这句语句告诉bash如果任何语句的执行结果不是true则应该退出。这样的好处是防止错误像滚雪球般变大导致一个致命的错误,而这些错误本应该在之前就被处理掉。如果要增加可读性,可以使用set -o errexit,它的作用与set -e相同。
3.3 查看进程线程的方法windows任务管理器可以查看进程和线程数,也可以用来杀死进程tasklist 查看进程taskkill 杀死进程linuxps -fe 查看所有进程ps -fT -p <PID> 查看某个进程(PID)的所有线程kill 杀死进程top 按大写 H 切换是否显示线程top -H -p <PID> 查看某个进程(PID)的所有线程Javajps 命令查看所有 Java 进程jstack <PID> 查看某个 Java 进程(PID)的所有线程状态jconsole 来查看某个 Java 进程中线程的运行情况(图形界面)