分类 Linux 相关 下的文章

linux 本地端口 使用

今天查问题 遇到如下异常:
java.net.ConnectException: Cannot assign requested address

看到网上大多数是说 本地往外连接的端口已经被占用完.
1) 首先查看本地的 ulimit 设置, 是否过小
_$ ulimit -a
2) 如果不是很小, 查看当前的 端口使用情况
_$ ss -s
3) 查看本地往外连接端口的设置:
_$ cat /proc/sys/net/ipv4/ip_local_port_range

更多的 linux 网络配置参数:https://www.tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.kernel.obscure.html#AEN1252

参考:
https://ma.ttias.be/linux-increase-ip_local_port_range-tcp-port-range/

关于 linux PS 命令

虽然经常用, 但是不是那么熟悉它竟然能提供那么多的信息. PS 是 Process Status 的缩写. top 命令的输出和 PS 很类似, 只不过是实时刷新.

ps --help all //显示所有的命令行参数
ps L //显示输出格式
ps H 16705 //显示特定进程的线程信息
ps --forest //显示进程直接的父子关系

ps -o ppid,pid,lwp,nlwp,%cpu,%mem,cputime,cmd,args k -%cpu H 16705 //输出一个进程的所有线程, 并且自定义格式, 按照 cpu 使用时间倒序排列.

关于格式中的nlwp: Number of Lightweight Processes. This basically amounts to the number of threads a program has running

一般结合 https://www.pslinux.online/index.php & ps --help all 就能找到想用的参数.

tcpdump

tcpdump - dump traffic on a network

tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ]

  • -w 写入文件
  • -r 从文件读入 -F 读入的文件
  • -V 从一批文件读入
  • -c 处理多少 package
  • -D or --list-interfaces 列出接口列表
  • -i --interface= 制定接口
  • -K --dont-verify-checksums 不验证 checksum 加快速度
  • -n 不转换数字为地址
  • -Q --direction=in|out|inout

samples here
sudo tcpdump host 10.102.196.239 -w /tmp/tcpdump.log.cap

ping:
sudo tcpdump -e icmp[icmptype] == 8 //ping echo request
sudo tcpdump -e icmp[icmptype] == 0 //ping echo reply

network diagnosis commands 网络诊断命令

  1. wget
    -- wget -S --spider -T 1 -t 2 sellerprof.vip

-- wget -S --spider -T 1 -t 2  --no-check-certificate https://esams.vip

  1. curl
    -- curl -I --retry 2 --connect-timeout 1 sellerprof.vip

-- curl -I --retry 2 --connect-timeout 1 -k https://esams.vip

  1. telnet
  2. nslookup
    -- nslookup -query=hinfo  -timeout=1 -retry=1 esams.vip
  3. ping
    -- ping -c 10 -W 1 sellerprof.vip
  4. traceroute/tracert
    -- traceroute esams.vip
  5. mtr
    -- mtr -w --timeout=1 esams.vip
  6. dig 由 BIND(互联网上最广泛使用的 DNS 软件) 提供的查询 DNS 的辅助工具,替换原来老的 nslookup 和 host

    dig //不带任何参数查询root dns .
    dig -h //help
    dig +short www.tianxiaohui.com // 简化输出
    dig +trace www.tianxiaohui.com //输出迭代式所有来回
    dig @8.8.8.8 tianxiaohui.com
    dig -x 54.222.60.252 //反向查询
    dig -f query.txt +short //从文件读
    dig google.com ANY //查询所有记录

  7. netstat
    来自于 net-tools 软件包. 已不推荐使用, 由 ss 命令来替换此命令.

-- netstat -t --wide
-- netstat -t -l
-- netstat -s

  1. nstat
    来自于 iproute2 软件包

-- nstat -a
-- nstat #可以提供2 次使用间的 delta
-- nstat --json #以 json 格式输出

  1. ss
    来自 iproute2 软件包, 用以替换 netstat. 更偏重于 socket 连接, 数据来自 /proc/net/tcp.

-- ss -t -l
-- ss --info
-- ss -it state syn-sent #根据状态查
-- ss -it dst abc.tianxiaohui.com #根据地址过滤
-- ss -it '( dport = :443 )' #根据目标端口查, 一定要注意这里面的空格, 括号里的空格每处都需要
-- ss -it '( dport = :443 or dport = :80 )' #或者
-- ss -it '( sport = :45321 )' #根据源端口查,

  1. routetable
    -- netstat -r
  2. ifconfig/ipconfig

ss linux command

ss 是比 netstat 更强大的后续版本.
The ss command is capable of showing more information than the netstat and is faster. The netstat command reads various /proc files to gather information. However this approach falls weak when there are lots of connections to display. This makes it slower. The ss command gets its information directly from kernel space.

ss -l
ss -t
ss -u
ss -nt
ss -ltp
ss -nt '( dst :443 or dst :80 )'

使用 -i 参数能显示更多关于每个 socket 的信息,比如接受/发送多少字节, 最后发送/接收/ack 了多久了, 采用了什么算法.
-p 显示进程信息, -e 显示用户信息. -m 显示内存信息.

http://man7.org/linux/man-pages/man8/ss.8.html