前言
大家好! 我叫 Sasha,我測試後端(Linux 服務和 API)已有六年多了。 寫這篇文章的想法是在一位測試員朋友再次請求我在面試前告訴他可以讀到的有關 Linux 命令的內容後產生的。 通常,QA 工程師職位的候選人需要了解基本命令(當然,如果它們涉及使用 Linux),但是如果您知之甚少,那麼在準備面試時如何知道哪些命令值得閱讀?或者沒有 Linux 經驗?
因此,雖然這個問題已經寫過很多次了,但我還是決定再寫一篇文章《Linux初學者》,在這裡列出在使用Linux的部門(或公司)面試之前需要了解的基本命令。 我思考了哪些命令和實用程式以及哪些參數是我最常使用的,收集了同事的回饋,並將其全部編譯成一篇文章。 本文分為 3 部分:首先簡要介紹 Linux 終端機中 I/O 的基礎知識,然後概述最基本的命令,第三部分描述如何解決 Linux 中的常見問題。
每個指令都有很多選項,這裡不再一一列出。 您隨時可以輸入`人<命令>` 或 `<命令> --幫助` 了解更多有關團隊的資訊。
示例:
[user@testhost ~]$ mkdir --help Usage: mkdir [OPTION]... DIRECTORY... Create the DIRECTORY(ies), if they do not already exist. Mandatory arguments to long options are mandatory for short options too. -m, --mode=MODE set file mode (as in chmod), not a=rwx - umask -p, --parents no error if existing, make parent directories as needed -v, --verbose print a message for each created directory -Z set SELinux security context of each created directory to the default type --context[=CTX] like -Z, or if CTX is specified then set the SELinux or SMACK security context to CTX --help display this help and exit --version output version information and exit GNU coreutils online help: <http://www.gnu.org/software/coreutils/> For complete documentation, run: info coreutils 'mkdir invocation'
如果命令需要很長時間才能完成,您可以透過點擊控制台來終止它 按Ctrl + C (訊號被傳送到進程 SIGINT).
關於命令輸出的一些訊息
當 Linux 中的進程啟動時,會為此進程建立 3 個標準資料流: 標準輸入, 標準輸出 и 斯特德。 它們分別編號為0、1和2。 但現在我們有興趣 標準輸出 並且,在較小程度上, 斯特德。 從名字就很容易猜到 標準輸出 用於輸出數據,且 斯特德 — 顯示錯誤訊息。 在 Linux 上運行命令時預設情況下 標準輸出 и 斯特德 將所有資訊輸出到控制台,但是,如果命令輸出很大,將其重定向到檔案可能會更方便。 例如,可以這樣完成:
[user@testhost ~]$ man signal > man_signal
如果我們輸出文件的內容 人類訊號,然後我們會看到它與我們簡單地運行命令 `男人訊號`.
重定向操作`>` 預設為 標準輸出。 您可以指定重定向 標準輸出 明確地:`1>`。 同樣,您可以指定重定向 斯特德:`2>`。 您可以組合這些操作,從而將正常命令輸出和錯誤訊息輸出分開:
[user@testhost ~]$ man signal 1> man_signal 2> man_signal_error_log
重定向和 標準輸出和 斯特德 放入一個文件中,如下圖所示:
[user@testhost ~]$ man signal > man_signal 2>&1
重定向操作`2>&1` 表示重定向 斯特德 依指示前往同一地點 標準輸出.
另一個用於處理 I/O 的便利工具(或更確切地說,它是用於進程間通訊的便利工具)是 管 (或者 輸送帶)。 管道通常用於傳遞多個命令: 標準輸出 命令被重定向到 標準輸入 接下來,依此類推:
[user@testhost ~]$ ps aux | grep docker | tail -n 2
root 1045894 0.0 0.0 7512 3704 ? Sl 16:04 0:00 docker-containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/2fbfddaf91c1bb7b9a0a6f788f3505dd7266f1139ad381d5b51ec1f47e1e7b28 -address /var/run/docker/containerd/docker-containerd.sock -containerd-binary /usr/bin/docker-containerd -runtime-root /var/run/docker/runtime-runc
531 1048313 0.0 0.0 110520 2084 pts/2 S+ 16:12 0:00 grep --color=auto docker
基本 Linux 指令
密碼
顯示目前(工作)目錄。
[user@testhost ~]$ pwd
/home/user
日期
顯示目前系統日期和時間。
[user@testhost ~]$ date
Mon Dec 16 13:37:07 UTC 2019
[user@testhost ~]$ date +%s
1576503430
w
此命令顯示誰登入系統。 此外,正常運作時間和LA(平均負載)也顯示在螢幕上。
[user@testhost ~]$ w
05:47:17 up 377 days, 17:57, 1 user, load average: 0,00, 0,01, 0,05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
user pts/0 32.175.94.241 05:47 2.00s 0.01s 0.00s w
ls
列印目錄的內容。 如果不傳遞路徑,將顯示目前目錄的內容。
[user@testhost ~]$ pwd
/home/user
[user@testhost ~]$ ls
qqq
[user@testhost ~]$ ls /home/user
qqq
[user@testhost ~]$ ls /
bin boot cgroup dev etc home lib lib64 local lost+found media mnt opt proc root run sbin selinux srv swap sys tmp usr var
就我個人而言,我經常使用以下選項 -l (長列表格式 - 輸出到包含有關文件的附加資訊的列), -t (依檔案/目錄修改時間排序)和 -r (反向排序 - 結合 -t 最新的文件將位於底部):
[user@testhost ~]$ ls -ltr /
total 4194416
drwxr-xr-x 2 root root 4096 Jan 6 2012 srv
drwxr-xr-x 2 root root 4096 Jan 6 2012 selinux
drwxr-xr-x 2 root root 4096 Jan 6 2012 mnt
drwxr-xr-x 2 root root 4096 Jan 6 2012 media
drwx------ 2 root root 16384 Oct 1 2017 lost+found
drwxr-xr-x 2 root root 4096 Oct 1 2017 local
drwxr-xr-x 13 root root 4096 Oct 1 2017 usr
drwxr-xr-x 11 root root 4096 Apr 10 2018 cgroup
drwxr-xr-x 4 root root 4096 Apr 10 2018 run
-rw------- 1 root root 4294967296 Sep 10 2018 swap
dr-xr-xr-x 10 root root 4096 Dec 13 2018 lib
drwxr-xr-x 6 root root 4096 Mar 7 2019 opt
drwxr-xr-x 20 root root 4096 Mar 19 2019 var
dr-xr-xr-x 10 root root 12288 Apr 9 2019 lib64
dr-xr-xr-x 2 root root 4096 Apr 9 2019 bin
dr-xr-xr-x 4 root root 4096 Apr 9 2019 boot
dr-xr-xr-x 2 root root 12288 Apr 9 2019 sbin
dr-xr-xr-x 3229 root root 0 Jul 2 10:19 proc
drwxr-xr-x 34 root root 4096 Oct 28 13:27 home
drwxr-xr-x 93 root root 4096 Oct 30 16:00 etc
dr-xr-x--- 11 root root 4096 Nov 1 13:02 root
dr-xr-xr-x 13 root root 0 Nov 13 20:28 sys
drwxr-xr-x 16 root root 2740 Nov 26 08:55 dev
drwxrwxrwt 3 root root 4096 Nov 26 08:57 tmp
有2個特殊的目錄名稱:「.“和”..」。 第一個表示目前目錄,第二個表示父目錄。 它們可以方便地在各種團隊中使用,特別是 ls:
[user@testhost home]$ pwd
/home
[user@testhost home]$ ls ..
bin boot cgroup dev etc home lib lib64 local lost+found media mnt opt proc root run sbin selinux srv swap sys tmp usr var
[user@testhost home]$ ls ../home/user/
qqq
還有一個有用的選項來顯示隱藏文件(以“.”)- -a:
[user@testhost ~]$ ls -a
. .. 1 .bash_history .bash_logout .bash_profile .bashrc .lesshst man_signal man_signal_error_log .mongorc.js .ssh temp test .viminfo
您也可以使用該選項 -h — 以人類可讀格式輸出(注意檔案大小):
[user@testhost ~]$ ls -ltrh
total 16K
-rwxrwx--x 1 user user 31 Nov 26 11:09 temp
-rw-rw-r-- 1 user user 6.0K Dec 3 16:02 1
drwxrwxr-x 2 user user 4.0K Dec 4 10:39 test
cd
更改目前目錄。
[user@testhost ~]$ pwd
/home/user
[user@testhost ~]$ cd /home/
[user@testhost home]$ pwd
/home
如果不傳遞目錄名稱作為參數,則將使用環境變數 $ HOME,即主目錄。 使用`也可能很方便~` 是一個特殊字元意義 $ HOME:
[user@testhost etc]$ pwd
/etc
[user@testhost etc]$ cd ~/test/
[user@testhost test]$ pwd
/home/user/test
MKDIR
建立一個目錄。
[user@testhost ~]$ mkdir test
[user@testhost ~]$ ls -ltr
total 38184
-rw-rw-r-- 1 user user 39091284 Nov 22 14:14 qqq
drwxrwxr-x 2 user user 4096 Nov 26 10:29 test
有時您需要建立特定的目錄結構:例如,不存在的目錄中的目錄。 避免連續輸入多次 MKDIR,您可以使用該選項 -p — 它允許您建立層次結構中所有缺少的目錄。 也有這個選項 MKDIR 如果目錄存在,則不會傳回錯誤。
[user@testhost ~]$ ls
qqq test
[user@testhost ~]$ mkdir test2/subtest
mkdir: cannot create directory ‘test2/subtest’: No such file or directory
[user@testhost ~]$ mkdir -p test2/subtest
[user@testhost ~]$ ls
qqq test test2
[user@testhost ~]$ ls test2/
subtest
[user@testhost ~]$ mkdir test2/subtest
mkdir: cannot create directory ‘test2/subtest’: File exists
[user@testhost ~]$ mkdir -p test2/subtest
[user@testhost ~]$ ls test2/
subtest
rm
刪除一個檔案。
[user@testhost ~]$ ls
qqq test test2
[user@testhost ~]$ rm qqq
[user@testhost ~]$ ls
test test2
選項 -r 允許您遞歸刪除目錄及其所有內容,選項 -f 允許您在刪除時忽略錯誤(例如,關於不存在的檔案)。 粗略地說,這些選項允許保證刪除整個文件和目錄層次結構(如果用戶有權這樣做),因此,應謹慎使用它們(一個經典的笑話示例是“rm-射頻/「,在某些情況下,會刪除你,如果不是整個系統,那麼很多檔案對其效能很重要)。
[user@testhost ~]$ ls
test test2
[user@testhost ~]$ ls -ltr test2/
total 4
-rw-rw-r-- 1 user user 0 Nov 26 10:40 temp
drwxrwxr-x 2 user user 4096 Nov 26 10:40 temp_dir
[user@testhost ~]$ rm -rf test2
[user@testhost ~]$ ls
test
cp
複製檔案或目錄。
[user@testhost ~]$ ls
temp test
[user@testhost ~]$ cp temp temp_clone
[user@testhost ~]$ ls
temp temp_clone test
該指令還有選項 -r и -f,它們可用於確保將目錄和資料夾的層次結構複製到另一個位置。
mv
移動或重新命名檔案或目錄。
[user@testhost ~]$ ls -ltr
total 4
drwxrwxr-x 2 user user 4096 Nov 26 10:29 test
-rw-rw-r-- 1 user user 0 Nov 26 10:45 temp
-rw-rw-r-- 1 user user 0 Nov 26 10:46 temp_clone
[user@testhost ~]$ ls test
[user@testhost ~]$ mv test test_renamed
[user@testhost ~]$ mv temp_clone test_renamed/
[user@testhost ~]$ ls
temp test_renamed
[user@testhost ~]$ ls test_renamed/
temp_clone
貓
列印一個或多個文件的內容。
[user@testhost ~]$ cat temp
Content of a file.
Lalalala...
命令也值得關注 頭 (輸出 n 文件的第一行或位元組)和 尾巴 (稍後會詳細介紹她)。
尾巴
撤 n 文件的最後幾行或位元組。
[user@testhost ~]$ tail -1 temp
Lalalala...
該選項非常有用 -f — 它允許您即時顯示文件中的新資料。
少
有時文字檔太大,用指令顯示不方便 貓。 然後你可以使用命令打開它 少:文件將分段輸出;可以使用這些部分進行導航、搜尋和其他簡單功能。
[user@testhost ~]$ less temp
使用起來可能也很方便 少 附傳送帶(管):
[user@testhost ~]$ grep "ERROR" /tmp/some.log | less
ps
列出進程。
[user@testhost ~]$ ps
PID TTY TIME CMD
761020 pts/2 00:00:00 bash
809720 pts/2 00:00:00 ps
我自己通常使用 BSD 選項”至" - 顯示系統中的所有進程(因為可能有很多進程,所以我使用管道只顯示其中的前5個(管)和團隊 頭):
[user@testhost ~]$ ps aux | head -5
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 19692 2600 ? Ss Jul02 0:10 /sbin/init
root 2 0.0 0.0 0 0 ? S Jul02 0:03 [kthreadd]
root 4 0.0 0.0 0 0 ? I< Jul02 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? I< Jul02 0:00 [mm_percpu_wq]
許多人還使用 BSD 選項“軸流”,它允許您顯示進程樹(這裡我刪除了部分輸出以進行演示):
[user@testhost ~]$ ps axjf
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
0 2 0 0 ? -1 S 0 0:03 [kthreadd]
2 4 0 0 ? -1 I< 0 0:00 _ [kworker/0:0H]
2 6 0 0 ? -1 I< 0 0:00 _ [mm_percpu_wq]
2 7 0 0 ? -1 S 0 4:08 _ [ksoftirqd/0]
...
...
...
1 4293 4293 4293 tty6 4293 Ss+ 0 0:00 /sbin/mingetty /dev/tty6
1 532967 532964 532964 ? -1 Sl 495 0:00 /opt/td-agent/embedded/bin/ruby /usr/sbin/td-agent --log /var/log/td-agent/td-agent.log --use-v1-config --group td-agent --daemon /var/run/td-agent/td-agent.pid
532967 532970 532964 532964 ? -1 Sl 495 803:06 _ /opt/td-agent/embedded/bin/ruby /usr/sbin/td-agent --log /var/log/td-agent/td-agent.log --use-v1-config --group td-agent --daemon /var/run/td-agent/td-agent.pid
1 537162 533357 532322 ? -1 Sl 0 5067:43 /usr/bin/dockerd --default-ulimit nofile=262144:262144 --dns=172.17.0.1
537162 537177 537177 537177 ? -1 Ssl 0 4649:28 _ docker-containerd --config /var/run/docker/containerd/containerd.toml
537177 537579 537579 537177 ? -1 Sl 0 4:48 | _ docker-containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/0ee89b20deb3cf08648cd92e1f3e3c661ccffef7a0971
537579 537642 537642 537642 ? -1 Ss 1000 32:11 | | _ /usr/bin/python /usr/bin/supervisord -c /etc/supervisord/api.conf
537642 539764 539764 537642 ? -1 S 1000 0:00 | | _ sh -c echo "READY"; while read -r line; do echo "$line"; supervisorctl shutdown; done
537642 539767 539767 537642 ? -1 S 1000 5:09 | | _ php-fpm: master process (/etc/php73/php-fpm.conf)
539767 783097 539767 537642 ? -1 S 1000 0:00 | | | _ php-fpm: pool test
539767 783131 539767 537642 ? -1 S 1000 0:00 | | | _ php-fpm: pool test
539767 783185 539767 537642 ? -1 S 1000 0:00 | | | _ php-fpm: pool test
...
...
...
該命令有許多不同的選項,因此如果您積極使用它,我建議您閱讀文件。 對於大多數情況,只需知道“ps aux“。
殺
向進程發送訊號。 預設發送訊號 目標期限,這會終止該進程。
[user@testhost ~]$ ps ux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
531 1027147 0.0 0.0 119956 4260 ? S 14:51 0:00 sshd: user@pts/1
531 1027149 0.0 0.0 115408 3396 pts/1 Ss 14:51 0:00 -bash
531 1027170 0.0 0.0 119956 4136 ? R 14:51 0:00 sshd: user@pts/2
531 1027180 0.0 0.0 115408 3564 pts/2 Ss 14:51 0:00 -bash
531 1033727 0.0 0.0 107960 708 pts/1 S+ 15:17 0:00 sleep 300
531 1033752 0.0 0.0 117264 2604 pts/2 R+ 15:17 0:00 ps ux
[user@testhost ~]$ kill 1033727
[user@testhost ~]$ ps ux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
531 1027147 0.0 0.0 119956 4260 ? S 14:51 0:00 sshd: user@pts/1
531 1027149 0.0 0.0 115408 3396 pts/1 Ss+ 14:51 0:00 -bash
531 1027170 0.0 0.0 119956 4136 ? R 14:51 0:00 sshd: user@pts/2
531 1027180 0.0 0.0 115408 3564 pts/2 Ss 14:51 0:00 -bash
531 1033808 0.0 0.0 117268 2492 pts/2 R+ 15:17 0:00 ps ux
由於進程可以有訊號處理程序, 殺 並不總是帶來預期的結果——立即完成該過程。 要確定“殺死”進程,您需要向該進程發送信號 殺人狂。 但是,這可能會導致資料遺失(例如,如果進程在終止之前需要將一些資訊儲存到磁碟),因此需要謹慎使用此命令。 訊號數量 殺人狂 - 9,所以該指令的簡短版本如下所示:
[user@testhost ~]$ ps ux | grep sleep
531 1034930 0.0 0.0 107960 636 pts/1 S+ 15:21 0:00 sleep 300
531 1034953 0.0 0.0 110516 2104 pts/2 S+ 15:21 0:00 grep --color=auto sleep
[user@testhost ~]$ kill -9 1034930
[user@testhost ~]$ ps ux | grep sleep
531 1035004 0.0 0.0 110516 2092 pts/2 S+ 15:22 0:00 grep --color=auto sleep
除了提到的那些 目標期限 и 殺人狂 還有更多不同的訊號;可以在網路上輕鬆找到它們的清單。 並且不要忘記訊號 殺人狂 и 停止信號 不能被攔截或忽略。
平
向主機發送 ICMP 封包 ECHO_REQUEST.
[user@testhost ~]$ ping google.com
PING google.com (172.217.15.78) 56(84) bytes of data.
64 bytes from iad23s63-in-f14.1e100.net (172.217.15.78): icmp_seq=1 ttl=47 time=1.85 ms
64 bytes from iad23s63-in-f14.1e100.net (172.217.15.78): icmp_seq=2 ttl=47 time=1.48 ms
64 bytes from iad23s63-in-f14.1e100.net (172.217.15.78): icmp_seq=3 ttl=47 time=1.45 ms
64 bytes from iad23s63-in-f14.1e100.net (172.217.15.78): icmp_seq=4 ttl=47 time=1.46 ms
64 bytes from iad23s63-in-f14.1e100.net (172.217.15.78): icmp_seq=5 ttl=47 time=1.45 ms
^C
--- google.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 1.453/1.541/1.850/0.156 ms
默認情況下, 平 一直工作到手動終止為止。 因此該選項可能有用 -c — 發送後的資料包數量 平 會自行完成。 我有時會使用的另一個選擇是 -i,發送資料包的間隔。
[user@testhost ~]$ ping -c 3 -i 5 google.com
PING google.com (172.217.5.238) 56(84) bytes of data.
64 bytes from iad30s07-in-f238.1e100.net (172.217.5.238): icmp_seq=1 ttl=47 time=1.55 ms
64 bytes from iad30s07-in-f14.1e100.net (172.217.5.238): icmp_seq=2 ttl=47 time=1.17 ms
64 bytes from iad30s07-in-f14.1e100.net (172.217.5.238): icmp_seq=3 ttl=47 time=1.16 ms
--- google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 10006ms
rtt min/avg/max/mdev = 1.162/1.295/1.551/0.181 ms
SSH
OpenSSH SSH 用戶端可讓您連線到遠端主機。
MacBook-Pro-User:~ user$ ssh [email protected]
Last login: Tue Nov 26 11:27:39 2019 from another_host
[user@testhost ~]$ hostname
testhost
使用 SSH 有很多細微差別,而且該用戶端還具有大量功能,因此如果您願意(或需要),可以閱讀有關它的內容
SCP
在主機之間複製檔案(為此用途 SSH).
[user@testhost ~]$ pwd
/home/user
[user@testhost ~]$ ls
temp test_renamed
[user@testhost ~]$ exit
logout
Connection to 11.11.22.22 closed.
MacBook-Pro-Aleksandr:~ user$ scp [email protected]:/home/user/temp Downloads/
temp 100% 31 0.2KB/s 00:00
MacBook-Pro-Aleksandr:~ user$ cat Downloads/temp
Content of a file.
Lalalala...
rsync的
您也可以用於同步主機之間的目錄 rsync的 (-a — 存檔模式,讓您「按原樣」複製目錄的全部內容, -v — 輸出到控制台的附加資訊):
MacBook-Pro-User:~ user$ ls Downloads/user
ls: Downloads/user: No such file or directory
MacBook-Pro-User:~ user$ rsync -av user@testhost:/home/user Downloads
receiving file list ... done
user/
user/.bash_history
user/.bash_logout
user/.bash_profile
user/.bashrc
user/.lesshst
user/.mongorc.js
user/.viminfo
user/1
user/man_signal
user/man_signal_error_log
user/temp
user/.ssh/
user/.ssh/authorized_keys
user/test/
user/test/created_today
user/test/temp_clone
sent 346 bytes received 29210 bytes 11822.40 bytes/sec
total size is 28079 speedup is 0.95
MacBook-Pro-User:~ user$ ls -a Downloads/user
. .bash_history .bash_profile .lesshst .ssh 1 man_signal_error_log test
.. .bash_logout .bashrc .mongorc.js .viminfo man_signal temp
錯過
顯示一行文字。
[user@testhost ~]$ echo "Hello"
Hello
這裡值得考慮的選項 -n - 不要在末尾附加換行符,並且 -e — 使用「」啟用轉義解釋。
[user@testhost ~]$ echo "tHellon"
tHellon
[user@testhost ~]$ echo -n "tHellon"
tHellon[user@testhost ~]$
[user@testhost ~]$ echo -ne "tHellon"
Hello
您也可以使用此命令顯示變數的值。 例如,在 Linux 中,最後完成的命令的退出程式碼會儲存在一個特殊變數中 $?,這樣您就可以準確地找出上次運行的應用程式中發生了什麼錯誤:
[user@testhost ~]$ ls # ошибки не будет
1 man_signal man_signal_error_log temp test
[user@testhost ~]$ echo $? # получим 0 — ошибки не было
0
[user@testhost ~]$ ls qwerty # будет ошибка
ls: cannot access qwerty: No such file or directory
[user@testhost ~]$ echo $? # получим 2 — Misuse of shell builtins (according to Bash documentation)
2
[user@testhost ~]$ echo $? # последний echo отработал без ошибок, получим 0
0
遠程登錄
TELNET 協定的客戶端。 用於與另一台主機通訊。
[user@testhost ~]$ telnet example.com 80
Trying 93.184.216.34...
Connected to example.com.
Escape character is '^]'.
GET / HTTP/1.1
Host: example.com
HTTP/1.1 200 OK
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
Date: Tue, 26 Nov 2019 11:59:18 GMT
Etag: "3147526947+gzip+ident"
Expires: Tue, 03 Dec 2019 11:59:18 GMT
Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
Server: ECS (dcb/7F3B)
Vary: Accept-Encoding
X-Cache: HIT
Content-Length: 1256
... здесь было тело ответа, которое я вырезал руками ...
如果您需要使用TLS協定(我提醒您,SSL早已過時),那麼 遠程登錄 不適合這些目的。 但客戶會來 OpenSSL的:
使用 openssl 輸出對 GET 請求的回應的範例
[user@testhost ~]$ openssl s_client -connect example.com:443
CONNECTED(00000003)
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA
verify return:1
depth=1 C = US, O = DigiCert Inc, CN = DigiCert SHA2 Secure Server CA
verify return:1
depth=0 C = US, ST = California, L = Los Angeles, O = Internet Corporation for Assigned Names and Numbers, OU = Technology, CN = www.example.org
verify return:1
---
Certificate chain
0 s:/C=US/ST=California/L=Los Angeles/O=Internet Corporation for Assigned Names and Numbers/OU=Technology/CN=www.example.org
i:/C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA
1 s:/C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA
i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Global Root CA
2 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Global Root CA
i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Global Root CA
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIHQDCCBiigAwIBAgIQD9B43Ujxor1NDyupa2A4/jANBgkqhkiG9w0BAQsFADBN
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMScwJQYDVQQDEx5E
aWdpQ2VydCBTSEEyIFNlY3VyZSBTZXJ2ZXIgQ0EwHhcNMTgxMTI4MDAwMDAwWhcN
MjAxMjAyMTIwMDAwWjCBpTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3Ju
aWExFDASBgNVBAcTC0xvcyBBbmdlbGVzMTwwOgYDVQQKEzNJbnRlcm5ldCBDb3Jw
b3JhdGlvbiBmb3IgQXNzaWduZWQgTmFtZXMgYW5kIE51bWJlcnMxEzARBgNVBAsT
ClRlY2hub2xvZ3kxGDAWBgNVBAMTD3d3dy5leGFtcGxlLm9yZzCCASIwDQYJKoZI
hvcNAQEBBQADggEPADCCAQoCggEBANDwEnSgliByCGUZElpdStA6jGaPoCkrp9vV
rAzPpXGSFUIVsAeSdjF11yeOTVBqddF7U14nqu3rpGA68o5FGGtFM1yFEaogEv5g
rJ1MRY/d0w4+dw8JwoVlNMci+3QTuUKf9yH28JxEdG3J37Mfj2C3cREGkGNBnY80
eyRJRqzy8I0LSPTTkhr3okXuzOXXg38ugr1x3SgZWDNuEaE6oGpyYJIBWZ9jF3pJ
QnucP9vTBejMh374qvyd0QVQq3WxHrogy4nUbWw3gihMxT98wRD1oKVma1NTydvt
hcNtBfhkp8kO64/hxLHrLWgOFT/l4tz8IWQt7mkrBHjbd2XLVPkCAwEAAaOCA8Ew
ggO9MB8GA1UdIwQYMBaAFA+AYRyCMWHVLyjnjUY4tCzhxtniMB0GA1UdDgQWBBRm
mGIC4AmRp9njNvt2xrC/oW2nvjCBgQYDVR0RBHoweIIPd3d3LmV4YW1wbGUub3Jn
ggtleGFtcGxlLmNvbYILZXhhbXBsZS5lZHWCC2V4YW1wbGUubmV0ggtleGFtcGxl
Lm9yZ4IPd3d3LmV4YW1wbGUuY29tgg93d3cuZXhhbXBsZS5lZHWCD3d3dy5leGFt
cGxlLm5ldDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG
AQUFBwMCMGsGA1UdHwRkMGIwL6AtoCuGKWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNv
bS9zc2NhLXNoYTItZzYuY3JsMC+gLaArhilodHRwOi8vY3JsNC5kaWdpY2VydC5j
b20vc3NjYS1zaGEyLWc2LmNybDBMBgNVHSAERTBDMDcGCWCGSAGG/WwBATAqMCgG
CCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BTMAgGBmeBDAEC
AjB8BggrBgEFBQcBAQRwMG4wJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2lj
ZXJ0LmNvbTBGBggrBgEFBQcwAoY6aHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29t
L0RpZ2lDZXJ0U0hBMlNlY3VyZVNlcnZlckNBLmNydDAMBgNVHRMBAf8EAjAAMIIB
fwYKKwYBBAHWeQIEAgSCAW8EggFrAWkAdwCkuQmQtBhYFIe7E6LMZ3AKPDWYBPkb
37jjd80OyA3cEAAAAWdcMZVGAAAEAwBIMEYCIQCEZIG3IR36Gkj1dq5L6EaGVycX
sHvpO7dKV0JsooTEbAIhALuTtf4wxGTkFkx8blhTV+7sf6pFT78ORo7+cP39jkJC
AHYAh3W/51l8+IxDmV+9827/Vo1HVjb/SrVgwbTq/16ggw8AAAFnXDGWFQAABAMA
RzBFAiBvqnfSHKeUwGMtLrOG3UGLQIoaL3+uZsGTX3MfSJNQEQIhANL5nUiGBR6g
l0QlCzzqzvorGXyB/yd7nttYttzo8EpOAHYAb1N2rDHwMRnYmQCkURX/dxUcEdkC
wQApBo2yCJo32RMAAAFnXDGWnAAABAMARzBFAiEA5Hn7Q4SOyqHkT+kDsHq7ku7z
RDuM7P4UDX2ft2Mpny0CIE13WtxJAUr0aASFYZ/XjSAMMfrB0/RxClvWVss9LHKM
MA0GCSqGSIb3DQEBCwUAA4IBAQBzcIXvQEGnakPVeJx7VUjmvGuZhrr7DQOLeP4R
8CmgDM1pFAvGBHiyzvCH1QGdxFl6cf7wbp7BoLCRLR/qPVXFMwUMzcE1GLBqaGZM
v1Yh2lvZSLmMNSGRXdx113pGLCInpm/TOhfrvr0TxRImc8BdozWJavsn1N2qdHQu
N+UBO6bQMLCD0KHEdSGFsuX6ZwAworxTg02/1qiDu7zW7RyzHvFYA4IAjpzvkPIa
X6KjBtpdvp/aXabmL95YgBjT8WJ7pqOfrqhpcmOBZa6Cg6O1l4qbIFH/Gj9hQB5I
0Gs4+eH6F9h3SojmPTYkT+8KuZ9w84Mn+M8qBXUQoYoKgIjN
-----END CERTIFICATE-----
subject=/C=US/ST=California/L=Los Angeles/O=Internet Corporation for Assigned Names and Numbers/OU=Technology/CN=www.example.org
issuer=/C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA
---
No client certificate CA names sent
Peer signing digest: SHA256
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 4643 bytes and written 415 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES128-GCM-SHA256
Session-ID: 91950DC50FADB57BF026D2661E6CFAA1F522E5CA60D2310E106EE0E0FD6E70BD
Session-ID-ctx:
Master-Key: 704E9145253EEB4E9DC47E3DC6725D296D4A470EA296D54F71D65E74EAC09EB096EA1305CBEDD9E7020B8F72FD2B68A5
Key-Arg : None
Krb5 Principal: None
PSK identity: None
PSK identity hint: None
TLS session ticket lifetime hint: 7200 (seconds)
TLS session ticket:
0000 - 68 84 4e 77 be e3 f5 00-49 c5 44 40 53 4d b9 61 [email protected]
0010 - c9 fe df e4 05 51 d0 53-ae cf 89 4c b6 ef 6c 9e .....Q.S...L..l.
0020 - fe 12 9a f0 e8 e5 4e 87-42 89 ac af ca e5 4a 85 ......N.B.....J.
0030 - 38 08 26 e3 22 89 08 b5-62 c0 8b 7e b8 05 d3 54 8.&."...b..~...T
0040 - 8c 24 91 a7 b4 4f 79 ad-36 59 7c 69 2d e5 7f 62 .$...Oy.6Y|i-..b
0050 - f6 73 a3 8b 92 63 c1 e3-df 78 ba 8c 5a cc 82 50 .s...c...x..Z..P
0060 - 33 4e 13 4b 10 e4 97 31-cc b4 13 65 45 60 3e 13 3N.K...1...eE`>.
0070 - ac 9e b1 bb 4b 18 d9 16-ea ce f0 9b 5b 0c 8b bf ....K.......[...
0080 - fd 78 74 a0 1a ef c2 15-2a 0a 14 8d d1 3f 52 7a .xt.....*....?Rz
0090 - 12 6b c7 81 15 c4 c4 af-7e df c2 20 a8 dd 4b 93 .k......~.. ..K.
Start Time: 1574769867
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
GET / HTTP/1.1
Host: example.com
HTTP/1.1 200 OK
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
Date: Tue, 26 Nov 2019 12:04:38 GMT
Etag: "3147526947+ident"
Expires: Tue, 03 Dec 2019 12:04:38 GMT
Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
Server: ECS (dcb/7EC8)
Vary: Accept-Encoding
X-Cache: HIT
Content-Length: 1256
<!doctype html>
<html>
<head>
<title>Example Domain</title>
<meta charset="utf-8" />
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style type="text/css">
body {
background-color: #f0f0f2;
margin: 0;
padding: 0;
font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
}
div {
width: 600px;
margin: 5em auto;
padding: 2em;
background-color: #fdfdff;
border-radius: 0.5em;
box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);
}
a:link, a:visited {
color: #38488f;
text-decoration: none;
}
@media (max-width: 700px) {
div {
margin: 0 auto;
width: auto;
}
}
</style>
</head>
<body>
<div>
<h1>Example Domain</h1>
<p>This domain is for use in illustrative examples in documents. You may use this
domain in literature without prior coordination or asking for permission.</p>
<p><a href="https://www.iana.org/domains/example">More information...</a></p>
</div>
</body>
</html>
解決Linux中的常見問題
更改文件所有者
您可以使用以下命令更改檔案或目錄的擁有者 喬敦:
[user@testhost ~]$ chown user:user temp
[user@testhost ~]$ ls -l temp
-rw-rw-r-- 1 user user 31 Nov 26 11:09 temp
此指令的參數必須指定新的擁有者和群組(可選),並以冒號分隔。 此外,當更改目錄的所有者時,該選項也很有用 -R - 那麼該目錄的所有內容的所有者都會發生變化。
更改檔案權限
這個問題可以使用指令解決 CHMOD。 作為一個例子,我將給出權限設定「擁有者允許讀取、寫入和執行,群組允許讀取和寫入,其他人不允許任何操作」:
[user@testhost ~]$ ls -l temp
-rw-rw-r-- 1 user user 31 Nov 26 11:09 temp
[user@testhost ~]$ chmod 760 temp
[user@testhost ~]$ ls -l temp
-rwxrw---- 1 user user 31 Nov 26 11:09 temp
參數中的前 7(位元表示形式為 0b111)表示“所有者的所有權利”,第二個 6(位表示形式為 0b110)表示“讀取和寫入”,其餘的 0 表示無任何權限。 位元遮罩由三個位元組成:最低有效位元(“右”)負責執行,下一個(“中間”)位元用於寫入,最高有效(“左”)位元用於讀取。
您也可以使用特殊字元設定權限(助記文法)。 例如,以下範例首先刪除目前使用者的執行權限,然後將其變更回來:
[user@testhost ~]$ ls -l temp
-rwxrw---- 1 user user 31 Nov 26 11:09 temp
[user@testhost ~]$ chmod -x temp
[user@testhost ~]$ ls -l temp
-rw-rw---- 1 user user 31 Nov 26 11:09 temp
[user@testhost ~]$ chmod +x temp
[user@testhost ~]$ ls -l temp
-rwxrwx--x 1 user user 31 Nov 26 11:09 temp
該命令有很多用途,因此我建議您閱讀更多相關內容(尤其是助記符語法,例如,
列印二進位檔案的內容
這可以使用實用程式來完成 十六進位轉儲。 以下是其使用範例。
[user@testhost ~]$ cat temp
Content of a file.
Lalalala...
[user@testhost ~]$ hexdump -c temp
0000000 C o n t e n t o f a f i l
0000010 e . n L a l a l a l a . . . n
000001f
[user@testhost ~]$ hexdump -x temp
0000000 6f43 746e 6e65 2074 666f 6120 6620 6c69
0000010 2e65 4c0a 6c61 6c61 6c61 2e61 2e2e 000a
000001f
[user@testhost ~]$ hexdump -C temp
00000000 43 6f 6e 74 65 6e 74 20 6f 66 20 61 20 66 69 6c |Content of a fil|
00000010 65 2e 0a 4c 61 6c 61 6c 61 6c 61 2e 2e 2e 0a |e..Lalalala....|
0000001f
使用此實用程序,您可以以其他格式輸出數據,但這些是使用它時最常用的選項。
搜尋文件
您可以使用以下命令在目錄樹中透過檔案名稱的一部分來尋找文件 找:
[user@testhost ~]$ find test_dir/ -name "*le*"
test_dir/file_1
test_dir/file_2
test_dir/subdir/file_3
也提供其他搜尋選項和過濾器。 例如,這是在資料夾中尋找文件的方法 test創建時間超過 5 天前:
[user@testhost ~]$ ls -ltr test
total 0
-rw-rw-r-- 1 user user 0 Nov 26 10:46 temp_clone
-rw-rw-r-- 1 user user 0 Dec 4 10:39 created_today
[user@testhost ~]$ find test/ -type f -ctime +5
test/temp_clone
搜尋文件中的文字
團隊將協助您應對這項任務 grep的。 它有很多用途,這裡以最簡單的一種為例。
[user@testhost ~]$ grep -nr "content" test_dir/
test_dir/file_1:1:test content for file_1
test_dir/file_2:1:test content for file_2
test_dir/subdir/file_3:1:test content for file_3
使用該命令的流行方法之一 grep的 - 在管道中使用它(管):
[user@testhost ~]$ sudo tail -f /var/log/test.log | grep "ERROR"
選項 -v 可以讓你做出效果 grep的' 以及相反 - 僅不包含傳遞給的模式的行 grep的.
查看已安裝的套件
沒有通用命令,因為一切都取決於 Linux 發行版和所使用的套件管理器。 以下命令之一很可能會對您有所幫助:
yum list installed
apt list --installed
zypper se —installed-only
pacman -Qqe
dpkg -l
rpm -qa
查看目錄樹佔了多少空間
使用該指令的選項之一 du:
[user@testhost ~]$ du -h -d 1 test_dir/
8,0K test_dir/subdir
20K test_dir/
您可以變更參數值 -d取得有關目錄樹的更多詳細資訊。 您也可以將該命令與 分類:
[user@testhost ~]$ du -h -d 1 test_dir/ | sort -h
8,0K test_dir/subdir
16K test_dir/subdir_2
36K test_dir/
[user@testhost ~]$ du -h -d 1 test_dir/ | sort -h -r
36K test_dir/
16K test_dir/subdir_2
8,0K test_dir/subdir
選項 -h 團隊 分類 允許您對以人類可讀格式編寫的大小(例如 1K、2G)進行排序,選項 -r 允許您以相反的順序對資料進行排序。
在文件、目錄中的文件中“尋找和替換”
此操作是使用實用程式執行的 口渴 (無旗幟 g 最後,只有該行中第一次出現的「old-text」將被替換):
sed -i 's/old-text/new-text/g' input.txt
您可以一次將其用於多個文件:
[user@testhost ~]$ cat test_dir/file_*
test content for file_1
test content for file_2
[user@testhost ~]$ sed -i 's/test/edited/g' test_dir/file_*
[user@testhost ~]$ cat test_dir/file_*
edited content for file_1
edited content for file_2
從輸出繪製一列
這將有助於應對這項任務 AWK。 此範例顯示命令輸出的第二列`使用者體驗`:
[user@testhost ~]$ ps ux | awk '{print $2}'
PID
11023
25870
25871
25908
25909
同時,必須牢記的是 AWK 具有更豐富的功能,因此如果您需要在命令列上處理文本,您應該閱讀有關此命令的更多資訊。
透過主機名稱尋找 IP 位址
以下命令之一將有助於解決此問題:
[user@testhost ~]$ host ya.ru
ya.ru has address 87.250.250.242
ya.ru has IPv6 address 2a02:6b8::2:242
ya.ru mail is handled by 10 mx.yandex.ru.
[user@testhost ~]$ dig +short ya.ru
87.250.250.242
[user@testhost ~]$ nslookup ya.ru
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: ya.ru
Address: 87.250.250.242
網絡信息
可以用 使用ifconfig:
[user@testhost ~]$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 47.89.93.67 netmask 255.255.224.0 broadcast 47.89.95.255
inet6 fd90::302:57ff:fe79:1 prefixlen 64 scopeid 0x20<link>
ether 04:01:57:79:00:01 txqueuelen 1000 (Ethernet)
RX packets 11912135 bytes 9307046034 (8.6 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 14696632 bytes 2809191835 (2.6 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 0 (Local Loopback)
RX packets 10 bytes 866 (866.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 10 bytes 866 (866.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
或者可能 ip:
[user@testhost ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 04:01:57:79:00:01 brd ff:ff:ff:ff:ff:ff
inet 47.89.93.67/19 brd 47.89.95.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fd90::302:57ff:fe79:1/64 scope link
valid_lft forever preferred_lft forever
3: ip_vti0: <NOARP> mtu 1500 qdisc noop state DOWN group default
link/ipip 0.0.0.0 brd 0.0.0.0
此外,例如,如果您只對 IPv4 感興趣,那麼您可以新增選項 -4:
[user@testhost ~]$ ip -4 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 47.89.93.67/19 brd 47.89.95.255 scope global eth0
valid_lft forever preferred_lft forever
查看開放埠
為此,請使用該實用程序 netstat命令。 例如,要查看所有 TCP 和 UDP 偵聽端口,並顯示偵聽端口的進程的 PID 和端口的數字表示形式,您需要將其與以下選項一起使用:
[user@testhost ~]$ netstat -lptnu
系統信息
您可以使用以下命令獲取此信息 UNAME.
[user@testhost ~]$ uname -a
Linux alexander 3.10.0-123.8.1.el7.x86_64 #1 SMP Mon Sep 22 19:06:58 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
要了解輸出是以什麼格式產生的,您可以參考 幫助'對於這個命令:
[user@testhost ~]$ uname --help
Использование: uname [КЛЮЧ]…
Печатает определенные сведения о системе. Если КЛЮЧ не задан,
подразумевается -s.
-a, --all напечатать всю информацию, в следующем порядке,
кроме -p и -i, если они неизвестны:
-s, --kernel-name напечатать имя ядра
-n, --nodename напечатать имя машины в сети
-r, --release напечатать номер выпуска операционной системы
-v, --kernel-version напечатать версию ядра
-m, --machine напечатать тип оборудования машины
-p, --processor напечатать тип процессора или «неизвестно»
-i, --hardware-platform напечатать тип аппаратной платформы или «неизвестно»
-o, --operating-system напечатать имя операционной системы
--help показать эту справку и выйти
--version показать информацию о версии и выйти
記憶體資訊
要了解有多少 RAM 已佔用或空閒,可以使用以下命令 .
[user@testhost ~]$ free -h
total used free shared buff/cache available
Mem: 3,9G 555M 143M 56M 3,2G 3,0G
Swap: 0B 0B 0B
有關檔案系統的資訊(可用磁碟空間)
團隊 df 允許您查看已安裝的檔案系統上有多少可用空間和已佔用空間。
[user@testhost ~]$ df -hT
Файловая система Тип Размер Использовано Дост Использовано% Cмонтировано в
/dev/vda1 ext4 79G 21G 55G 27% /
devtmpfs devtmpfs 2,0G 0 2,0G 0% /dev
tmpfs tmpfs 2,0G 0 2,0G 0% /dev/shm
tmpfs tmpfs 2,0G 57M 1,9G 3% /run
tmpfs tmpfs 2,0G 0 2,0G 0% /sys/fs/cgroup
tmpfs tmpfs 396M 0 396M 0% /run/user/1001
選項 -T 指定應推斷檔案系統類型。
有關係統上的任務和各種統計信息的信息
為此,請使用命令 最佳。 它能夠顯示各種資訊:例如,RAM 使用率最高的進程或 CPU 時間使用率最高的進程。 它還顯示有關記憶體、CPU、正常運行時間和 LA(平均負載)的資訊。
[user@testhost ~]$ top | head -10
top - 17:19:13 up 154 days, 6:59, 3 users, load average: 0.21, 0.21, 0.27
Tasks: 2169 total, 2 running, 2080 sleeping, 0 stopped, 0 zombie
Cpu(s): 1.7%us, 0.7%sy, 0.0%ni, 97.5%id, 0.0%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 125889960k total, 82423048k used, 43466912k free, 16026020k buffers
Swap: 0k total, 0k used, 0k free, 31094516k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
25282 user 20 0 16988 3936 1964 R 7.3 0.0 0:00.04 top
4264 telegraf 20 0 2740m 240m 22m S 1.8 0.2 23409:39 telegraf
6718 root 20 0 35404 4768 3024 S 1.8 0.0 0:01.49 redis-server
該實用程式具有豐富的功能,因此如果您需要經常使用它,最好閱讀其文件。
網路流量轉儲
為了攔截 Linux 中的網路流量,使用了一個實用程式 轉儲。 若要轉儲連接埠 12345 上的流量,可以使用下列命令:
[user@testhost ~]$ sudo tcpdump -i any -A port 12345
選項 -A 表示我們希望看到 ASCII 格式的輸出(因此這對於文字協定很有用), -i 任意 表示我們對網路介面不感興趣, 端口 — 要轉儲哪個連接埠流量。 代替 端口 可以用 主持人,或組合 主持人 и 端口 (主機A和連接埠X)。 另一個有用的選項可能是 -n — 請勿在輸出中將位址轉換為主機名稱。
如果流量是二進位的怎麼辦? 那麼該選項將幫助我們 -X — 以十六進位和 ASCII 輸出資料:
[user@testhost ~]$ sudo tcpdump -i any -X port 12345
應該考慮到,在這兩種用例中都會輸出 IP 封包,因此在每個封包的開頭都會有二進位 IP 和 TCP 標頭。 這是查詢的範例輸出“123" 傳送至監聽連接埠 12345 的伺服器:
[user@testhost ~]$ sudo tcpdump -i any -X port 12345
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
14:27:13.224762 IP localhost.49794 > localhost.italk: Flags [P.], seq 2262177478:2262177483, ack 3317210845, win 342, options [nop,nop,TS val 3196604972 ecr 3196590131], length 5
0x0000: 4510 0039 dfb6 4000 4006 5cf6 7f00 0001 E..9..@.@......
0x0010: 7f00 0001 c282 3039 86d6 16c6 c5b8 9edd ......09........
0x0020: 8018 0156 fe2d 0000 0101 080a be88 522c ...V.-........R,
0x0030: be88 1833 3132 330d 0a00 0000 0000 0000 ...3123.........
0x0040: 0000 0000 0000 0000 00 .........
而不是輸出
當然,Linux 中還有很多更有趣的東西,您可以在 Habré、StackOverflow 和其他網站上閱讀到(我給您舉個例子)
來源: www.habr.com