HAYASHIER.COM - Private Page
よく使うトラブルシューティング コマンド実行例 まとめ

ファイル

$ find ./ -name hoge
$ grep -r hoge ./
$ du -sh * | sort -h -r
$ while true; do sleep 1; echo hello; done
$ sudo ionice -c 2 -n 7 nice -n 19 du -scm /* | sort -rn
$ df -Th
$ free -m
$ swapon -s

/proc/

$ less /proc/cpuinfo
$ less /proc/meminfo
$ ls -l /proc/*/fd/ | grep inotify | wc -l

プロセス

$ ps auxww
$ lsof -p PID番号
$ pkill -f /bin/sh
$ ps auxww | grep /bin/sh | awk '{print $2}' | xargs kill

バージョン

$ cat /etc/redhat-release
$ uname -a
$ rpm -qa
$ sudo ls -l /proc/2676/fd
$ ps aux -L
$ pgrep -l syslog
$ pstree

ls系

$ lspci
$ lscpu
$ lsblk
$ lsmod

dmidecode

$ dmidecode -t system
$ dmidecode -t bios
$ dmidecode -t processor
$ dmidecode -t memory

auditd

/etc/audit/rules.d/audit.rules ファイルの末尾に、以下の行を追加しOSを再起動

-a entry,always -F arch=b64 -S kill -k MyKillTrace 

以後、/var/log/audit/audit.log に kill システムコールを呼び出したプロセスの情報が記録される。 以下のようにコマンドで対象のプロセスが発行したkillシステムコールをログに出力。

# strace -fttvo ログファイル名 -s 1000 -e kill -p プロセスID

ネットワーク

General

$ vmstat 5
$ sar -p 5
$ top -u oracle
$ top -H -b -n1 | head -15
$ vmstat -d

接続性

$ sudo traceroute -T -p 443 192.168.0.1
$ sudo nping 192.168.0.1 --tcp -p 443 -c 30
$ mtr --report -c 100 --no-dns github.com

コマンド毎

netstat

$ netstat -lanpt
$ netstat -an
$ netstat -i
$ netstat -nA inet | awk '/^[ut]/{split($5,a,:);print a[1]}'|sort |uniq -c |sort -n > ip-2.txt

IPv6

$ netstat -nA inet6 | awk '{print $5}' | sed s/::ffff:// | cut -d: -f1 | sort | uniq -c | sort -n > ip6-2.txt

ss

$ ss -a | wc -l
$ ss -t | wc -l
$ ss state time-wait | wc -l

curl

$ curl -v -s www.google.com > /dev/null
$ curl -v -so /dev/null www.google.com
$ curl -v -s -H Host: www.google.com clb.test.hayashier.com > /dev/null
$ curl -s -o /dev/null -w %{time_total} http://www.google.com
$ curl -w %{remote_ip} time_namelookup: %{time_namelookup} tcp: %{time_connect} ssl:%{time_appconnect} start_transfer:%{time_starttransfer} total:%{time_total}\n -sk -o /dev/null http://www.google.com
$ curl --request POST 'http://www.google.com' --data hoge=fuga

動画ファイルのPOST

$ curl -v -F video=@Downloads/test.mp4 -X POST http://test.hayashier.com
$ curl -v --cookie HOGE=FUGA http://clb.test.hayashier.com
$ curl -IsSv <FQDN> 2>&1 | grep Trying
$ IsError=false; while [ $IsError != true ]; do curl -I -k <URL> 2>&1 | tee error.out | grep HTTP/1.1  ; done;

スリープ付き

$ IsError=false; while [ $IsError != true ]; do sleep .5; (time curl -I -k <URL>) 2>&1; done;
$ while true; do curl -s -o /dev/null -w HTTPCode=%{http_code} TotalTime=%{time_total}\n http://www.google.com; done
$ while true; do curl -I -L http://www.google.com/; sleep 5; done
$ curl --http2 -I https://twitter.com
$ curl -v -H 'TEST: '$(perl -e 'print 0x16376') http://test.hayashier.com
\n
Timing:\n
DNS Resolution Time:  %{time_namelookup}\n
TCP Handshake:    %{time_connect}\n
SSL Handshake:    %{time_appconnect}\n
time_pretransfer: %{time_pretransfer}\n
time_redirect:    %{time_redirect}\n
time_starttransfer: %{time_starttransfer}\n
---------------------------------------------\n
Total Time spent: %{time_total}\n
\n
HTTP Details:\n
HTTP Status Code: %{http_code}\n
Request Size:   %{size_request}\n
\n
$ curl -w '@curl-format.txt' -L https://google.com -so /dev/null


Timing:
DNS Resolution Time:  0.030453
TCP Handshake:    0.044017
SSL Handshake:    0.087345
time_pretransfer: 0.087440
time_redirect:    1.848814
time_starttransfer: 0.331126
---------------------------------------------
Total Time spent: 3.383122

HTTP Details:
HTTP Status Code: 200
Request Size:   152
$ while true; do curl --connect-timeout 5 -o /dev/null -Ssk -H Host: api.github.com https://192.30.255.116/ && echo ok; sleep 1; done

dig

$ dig +short +noall +answer alb.test.hayashier.com | xargs -L 1 curl -vG 2>&1 >/dev/null | awk '/^(< HTTP|> Host)/ { print $3 }'
$ for j in `dig +short  ns github.com.`; do dig @$j +short api.github.com.; done

OpenSSL

$ openssl s_client -connect clb.test.hayashier.com:443

GET / HTTP/1.1
$ openssl s_client -showcerts -connect <host>:<port> < /dev/null
$ openssl s_client -cipher 'ECDHE-ECDSA-AES256-SHA' -connect clb.test.hayashier.com:443 

Netcat

$ nc -v -l -k 1234
Connection from 127.0.0.1 port 1234 [tcp/search-agent] accepted
Hi
World

Connection from 127.0.0.1 port 1234 [tcp/search-agent] accepted
GET / HTTP/1.1
Host: localhost:1234
User-Agent: curl/7.51.0
Accept: */*

Connection from 127.0.0.1 port 1234 [tcp/search-agent] accepted
POST / HTTP/1.1
Host: localhost:1234
User-Agent: curl/7.51.0
Accept: */*
Content-Length: 9
Content-Type: application/x-www-form-urlencoded

hoge=fuga
$ nc localhost 1234 -v
Connection to localhost 1234 port [tcp/search-agent] succeeded!
Hi
World
$ while true ; do echo -n $(date): ; nc -vz api.github.com 443; sleep 2; done
$ date --date='@1527718243'
Thu May 31 07:10:43 JST 2018

負荷テスト

$ h2load -n 10000 -c 10 -m 10 -v -p h2c https://test.hayashier.com
$ ab -n 10000 -c 10 -k https://test.hayashier.com
$ curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
$ sudo yum -y install sysbench

実行方法

$ sysbench --test=cpu run

パケットキャプチャ 

$ sudo tcpdump -w sample.pcap

sample.pcapというpcapファイルを読み込み(-rオプション)、DNSに変換せずに(-nオプション)、srcかdstのホストIPがxxx.xxx.xxx.xxxかつTCPポート80番

$ tcpdump -r sample.pcap host xxx.xxx.xxx.xxx and tcp port 80 -n

sample.pcapというpcapファイルを読み込み(-rオプション)、DNSに変換せずに(-nオプション)、srcのホストIPがxxx.xxx.xxx.xxxかつdstのホストIPがyyy.yyy.yyy.yyyかつTCPポート80番

$ tcpdump -r sample.pcap ip dst xxx.xxx.xxx.xxx and ip src yyy.yyy.yyy.yyy and tcp port 80 -n

Wireshark

http.request and http contains Root=1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   # ALBにおけるアクセスログとキャプチャの関連付け
http.response.code == 502
tcp.flags.reset == 1

ip.addr == 10.0.0.1 && tcp.flags.fin
ip.src == 10.0.0.1 or ip.src == 10.0.0.2
ip.dst == 10.0.0.1
eth.src [0:3] == 00:00:83
tcp.port in {443, 80, 8080}

カーネルソースコード入手

# yumdownloader --source kernel
Loaded plugins: auto-update-debuginfo, priorities, update-motd, upgrade-helper
Enabling ius-source repository
Enabling amzn-updates-source repository
Enabling amzn-main-source repository
31 packages excluded due to repository priority protections
kernel-4.9.93-41.60.amzn1.src.rpm                                                                                                                                                     | 136 MB  00:00:03     
# rpm2cpio kernel-4.9.93-41.60.amzn1.src.rpm | cpio -id
1363606 blocks
# tar -xf linux-4.9.93.tar
# ls linux-4.9.93/
arch   certs    CREDITS  Documentation  firmware  include  ipc     Kconfig  lib          Makefile  net     REPORTING-BUGS  scripts   sound  usr
block  COPYING  crypto   drivers        fs        init     Kbuild  kernel   MAINTAINERS  mm        README  samples         security  tools  virt

screen

Ctrl+a c : ウィンドウ新規作成
Ctrl+a  : ウィンドウ一覧
Ctrl+a num : ウィンドウ切り替え
Ctrl+a Ctrl+a : ウィンドウ間の行き回

Ctrl+a S : 画面垂直分割(リージョン分割)
Ctrl+a tab : リージョン切り替え
Ctrl+a x : リージョン削除

作業終了時 : exit
作業中断時 : Ctrl+a, Ctrl+d
作業再開時 : screen -r [Session ID]
指定した名前でセッション新規作成 : screen -S [Session ID]

セッション一覧 : screen -ls
セッション終了 :  screen -XS <Session ID> kill

Copy & Paste : Ctrl + [ ,  Ctrl + ]

その他

10進数へ変換

2進数

$ echo $((2#101))

16進数

$ echo $((16#afaf))

ALBで502生成

$ sudo iptables -A INPUT -s 192.168.0.10 -p tcp --dport 80 -j REJECT --reject-with tcp-reset

参考資料

Linux コマンド例 まとめ

参照