pssh系列工具

  1、pssh簡介及安裝html

  首先咱們來了解下什麼是pssh,它是幹嗎用的?pssh是一個python編寫能夠在多臺服務器上執行命令的工具,也能夠實現文件複製。換而言之就是一個批量管理多臺服務器的一個小工具。經常咱們有這樣的經歷,就是須要在不少臺主機上執行同一命令,在之前咱們須要編寫一個腳本,而後寫一個循環,而後寫上要執行的命令,感受挺麻煩的,有了pssh這個工具,不少事情都不須要咱們編寫腳本去完成了,用pssh管理多臺主機,就好像在本身主機上執行命令同樣,咱們再也不編寫腳本就能夠實現管理多臺主機。接下來咱們來安裝使用pssh吧python

  一、查看pssh包信息mysql

[root@test ~]# yum info pssh
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
Available Packages
Name        : pssh
Arch        : noarch
Version     : 2.3.1
Release     : 5.el6
Size        : 50 k
Repo        : epel
Summary     : Parallel SSH tools
URL         : http://code.google.com/p/parallel-ssh/
License     : BSD
Description : This package provides various parallel tools based on ssh and scp.
            : Parallell version includes:
            :  o ssh : pssh
            :  o scp : pscp
            :  o nuke : pnuke
            :  o rsync : prsync
            :  o slurp : pslurp
[root@test ~]#

  說明:能夠看到pssh這個包主要功能就是提供了各類基於ssh和scp的命令行工具,包裏包含了pssh、pscp、pnuke、prsync、pslurp,這五個工具。這個包來源epel,因此在查看和安裝以前請先配好本身的epel源。linux

  二、安裝pssh包sql

[root@test ~]# yum install -y pssh

  2、pssh工具的使用docker

pssh命令選項有以下:apache

  --version:查看版本信息vim

[root@test ~]# pssh --version
2.3.1
[root@test ~]#

  -h:主機文件列表,內容格式"[user@]host[:port]"centos

[root@docker test]#cat > iplist << EOF
> root@192.168.0.128
> root@192.168.0.217
> qiuhom@192.168.0.218
> EOF
[root@docker test]#cat iplist 
root@192.168.0.128
root@192.168.0.217
qiuhom@192.168.0.218
[root@docker test]#pssh -h iplist 'ls -l'
[1] 22:08:50 [SUCCESS] root@192.168.0.128
[2] 22:08:50 [SUCCESS] root@192.168.0.217
[3] 22:08:50 [SUCCESS] qiuhom@192.168.0.218
[root@docker test]#

  說明:以上命令的意思是在我iplist定義的主機上執行ls -l命令,這裏要說一下,pssh默認是基於key認證鏈接遠程主機,因此我在執行上面的命令沒有輸入口令。bash

  -H:主機字符串,內容格式"[user@]host[:port]"。

[root@docker ~]#pssh -H 192.168.0.128 'ls /'  
[1] 22:17:40 [SUCCESS] 192.168.0.128
[root@docker ~]#

  說明:-H是指定某一臺主機的選項,固然要指定多臺主機,能夠用-H一一指定,也能夠用-H 指定不少主機,可是每一個主機用空格隔開,且多個主機要用引號引發來。

  -A:手動輸入密碼模式

[root@docker ~]#pssh -H qiuhom@192.168.0.99:41319 -A 'ls'   
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password: 
[1] 22:40:20 [SUCCESS] qiuhom@192.168.0.99:41319
[root@docker ~]#

  說明:pssh默認是用ssh的key驗證來執行命令,若是咱們要管理沒有作SSHkey驗證的主機,那麼咱們能夠用-A來指定手動輸入密碼模式,有關ssh基於key認證登陸,請參考本人博客http://www.javashuo.com/article/p-rjibahxc-bk.html

  -i:每一個服務器內部處理信息輸出

[root@docker ~]#pssh -h test/iplist -i 'ip addr show'
[1] 22:44:31 [SUCCESS] root@192.168.0.128
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:41:ff:c0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.128/24 brd 192.168.0.255 scope global eth1
    inet6 fe80::20c:29ff:fe41:ffc0/64 scope link 
       valid_lft forever preferred_lft forever
[2] 22:44:31 [FAILURE] qiuhom@192.168.0.218 Exited with error code 127
Stderr: bash: ip: command not found
[3] 22:44:31 [SUCCESS] root@192.168.0.217
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    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: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:98:0a:46 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.217/24 brd 192.168.0.255 scope global dynamic ens33
       valid_lft 4184sec preferred_lft 4184sec
    inet6 fe80::f565:ff52:6ab3:b9da/64 scope link 
       valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
    link/ether 52:54:00:f8:82:a0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
    link/ether 52:54:00:f8:82:a0 brd ff:ff:ff:ff:ff:ff
[root@docker ~]#

  說明:在咱們不指定選項-i,pssh默認只輸出執行命令的成功與失敗狀態,並不會把執行的結果信息打印出來。使用-i咱們能夠把在每臺主機上執行命令的結果和命令執行成功與否一併顯示。上面有一個centos6的主機上沒有裝iproute包因此 默認沒有ip這個命令,因此命令沒有執行成功。

  -l登陸使用的用戶名

[root@docker ~]#pssh -H 192.168.0.218 -l qiuhom -i 'whoami'
[1] 22:49:46 [SUCCESS] 192.168.0.218
qiuhom
[root@docker ~]#pssh -H 192.168.0.218 -l root -i -A 'whoami'   
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password: 
[1] 22:50:03 [SUCCESS] 192.168.0.218
root
[root@docker ~]#

  說明:-l選項就是指定以那個用戶執行命令,這個指定的用戶是遠程主機上的用戶。一般-l(小寫L) 與-A配合使用。

  -o:輸出的文件目錄

[root@docker ~]#pssh -o /root/dr1/ -h test/iplist 'ls /'
[1] 23:02:44 [SUCCESS] root@192.168.0.128
[2] 23:02:44 [SUCCESS] qiuhom@192.168.0.218
[3] 23:02:44 [SUCCESS] root@192.168.0.217
[root@docker ~]#tree /root/dr1/
/root/dr1/
├── qiuhom@192.168.0.218
├── root@192.168.0.128
└── root@192.168.0.217

0 directories, 3 files
[root@docker ~]#cat /root/dr1/qiuhom@192.168.0.218 
bin
boot
dev
etc
home
lib
lib64
lost+found
media
misc
mnt
net
opt
proc
root
sbin
selinux
srv
sys
tmp
usr
var
[root@docker ~]#

  說明:-o是指定把命令執行的結果輸出到以主機命名的文件存放地。也就是說命令執行後的結果保存在以主機命名的一個文件裏,-o就是指定一個目錄存放這些文件的。

  -t:TIMEOUT超時時間設置,0無限

[root@docker ~]#pssh -t 3 -h test/iplist -i 'ping 8.8.8.8'
[1] 23:09:39 [FAILURE] root@192.168.0.128 Timed out, Killed by signal 9
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=52 time=53.5 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=52 time=53.6 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=52 time=53.5 ms
[2] 23:09:39 [FAILURE] root@192.168.0.217 Timed out, Killed by signal 9
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=52 time=54.2 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=52 time=53.8 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=52 time=53.4 ms
[3] 23:09:39 [FAILURE] qiuhom@192.168.0.218 Timed out, Killed by signal 9
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=52 time=53.2 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=52 time=53.9 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=52 time=53.6 ms
[root@docker ~]#

  以上就是pssh工具的經常使用選項說明以及用法

  3、pscp.pssh命令選項說明以及使用

pscp.pssh功能是將本地文件批量複製到遠程主機

命令用法: 

pscp.pssh [-vAr] [-h hosts_file] [-H [user@]host[:port]] [-l user] [-p par] [-o outdir] [-e errdir] [-t timeout] [-O options] [-x args] [-X arg] local remote

  說明:pscp.pssh以上不少選項和pssh用法是同樣的,好比-A -H -h -l等等

  -v:顯示覆制過程

  -r:遞歸複製目錄

[root@docker ~]#pscp.pssh -r -h test/iplist scripts/ /home/
[1] 23:27:57 [SUCCESS] root@192.168.0.128
[2] 23:27:57 [FAILURE] qiuhom@192.168.0.218 Exited with error code 1
[3] 23:27:57 [SUCCESS] root@192.168.0.217
[root@docker ~]#pssh -h test/iplist -i 'ls /home/'
[1] 23:28:30 [SUCCESS] root@192.168.0.128
abc
admin
scripts
tom
[2] 23:28:30 [SUCCESS] qiuhom@192.168.0.218
qiuhom
testuser1
[3] 23:28:31 [SUCCESS] root@192.168.0.217
roo
scripts
tom
[root@docker ~]#

  說明:能夠看到咱們把指定目錄遞歸複製到目標主機上了,上面有一個主機失敗了,緣由是那個主機上是一個普通用戶作的SSH key認證,咱們用的是qiuhom這個普通用戶的身份在遠程主機上管理,由於qiuhom這個普通用戶對/home/目錄沒有寫權限,因此執行失敗了。

示例:

  將本地的單個文件複製到遠程主機上

[root@docker ~]#pssh -H qiuhom@192.168.0.218 -i 'ls -l /home/qiuhom/'
[1] 23:39:53 [SUCCESS] qiuhom@192.168.0.218
總用量 0
[root@docker ~]#pscp.pssh  -H qiuhom@192.168.0.218 /etc/fstab /home/qiuhom/
[1] 23:40:26 [SUCCESS] qiuhom@192.168.0.218
[root@docker ~]#pssh -H qiuhom@192.168.0.218 -i 'ls -l /home/qiuhom/'  
[1] 23:40:29 [SUCCESS] qiuhom@192.168.0.218
總用量 4
-rw-r--r--. 1 qiuhom qiuhom 552 11月  8 23:40 fstab
[root@docker ~]#

  將本地多個文件複製到遠程主機上

[root@docker ~]#pssh -H qiuhom@192.168.0.218 -i 'ls -l /home/qiuhom/'  
[1] 23:40:29 [SUCCESS] qiuhom@192.168.0.218
總用量 4
-rw-r--r--. 1 qiuhom qiuhom 552 11月  8 23:40 fstab
[root@docker ~]#pscp.pssh -H qiuhom@192.168.0.218 /root/f1 /etc/inittab /var/log/messages /home/qiuhom/
[1] 23:42:01 [SUCCESS] qiuhom@192.168.0.218
[root@docker ~]#pssh -H qiuhom@192.168.0.218 -i 'ls -l /home/qiuhom/'                              
[1] 23:42:06 [SUCCESS] qiuhom@192.168.0.218
總用量 248
-rw-r--r--. 1 qiuhom qiuhom     18 11月  8 23:41 f1
-rw-r--r--. 1 qiuhom qiuhom    552 11月  8 23:40 fstab
-rw-r--r--. 1 qiuhom qiuhom    511 11月  8 23:41 inittab
-rw-------. 1 qiuhom qiuhom 239787 11月  8 23:41 messages
[root@docker ~]#

  將本地目錄批量複製到遠程主機上

[root@docker ~]#pssh -H 192.168.0.128 -i 'ls -l /home/'
[1] 23:51:31 [SUCCESS] 192.168.0.128
總用量 0
[root@docker ~]#pscp.pssh -H 192.168.0.128 -r /etc/sysconfig/network-scripts/ /home/
[1] 23:52:32 [SUCCESS] 192.168.0.128
[root@docker ~]#pssh -H 192.168.0.128 -i 'ls -l /home/'
[1] 23:52:53 [SUCCESS] 192.168.0.128
總用量 4
drwxr-xr-x 2 root root 4096 10月 25 03:36 network-scripts
[root@docker ~]#

  4、pslurp命令的使用

pslurp命令的功能是將遠程主機的文件批量複製到本地

命令用法:

pslurp [-vAr] [-h hosts_file] [-H [user@]host[:port]] [-l user] [-p par][-o outdir] [-e errdir] [-t timeout] [-O options] [-x args] [-X arg] [-L localdir] remote local(本地名)

  說明:這個工具的用法和pscp.pssh的用法很相似,都是對文件的操做,pscp.pssh是往遠程主機上推送,pslurp是從遠程主機上拉去文件到本地。

  -L:指定從遠程主機下載到本機的儲存的目錄,local是下載到本地後的名稱

  -r:遞歸複製目錄

示例:

  批量下載目標服務器的passwd文件至/root下,並命名爲user

[root@docker ~]#ll
總用量 4
drwxr-xr-x 2 root root  24 8月  31 18:04 ansible
drwxr-xr-x 7 root root  95 7月  11 11:21 docker-training
drwxr-xr-x 2 root root  86 11月  8 23:02 dr1
-rw-r--r-- 1 root root  18 11月  8 23:20 f1
drwxr-xr-x 2 root root  42 10月 24 21:51 scripts
drwxr-xr-x 2 root root  47 7月  22 10:11 temp
drwxr-xr-x 2 root root 100 11月  8 23:20 test
[root@docker ~]#pslurp -h test/iplist  -L /root/ /etc/passwd user
[1] 00:03:00 [SUCCESS] qiuhom@192.168.0.218
[2] 00:03:00 [SUCCESS] root@192.168.0.217
[3] 00:03:04 [SUCCESS] root@192.168.0.128
[root@docker ~]#ls
192.168.0.128  192.168.0.217  192.168.0.218  ansible  docker-training  dr1  f1  scripts  temp  test
[root@docker ~]#ll 192.168.0.128/
總用量 4
-rw-r--r-- 1 root root 1262 11月  9 00:03 user
[root@docker ~]#cat 192.168.0.128/user 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
abc:x:500:500::/home/abc:/bin/bash
admin:x:501:501::/home/admin:/bin/bash
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
apache:x:48:48:Apache:/var/www:/sbin/nologin
tom:x:502:502::/home/tom:/bin/bash
[root@docker ~]#

  說明:-L 是指定存放遠程主機下載下來的文件存放地,每一個主機的文件都會在其指定的本地目錄下以遠程主機ip爲名的目錄名下放着,文件名爲咱們指定的文件名。

  將遠程主機192.168.0.128 上的/etc/profile.d/目錄下載到本地主機

[root@docker test]#ll
總用量 4
-rw-r--r-- 1 root root 59 11月  8 22:04 iplist
[root@docker test]#pslurp -r -H 192.168.0.128 /etc/profile.d/ .
[1] 00:30:09 [SUCCESS] 192.168.0.128
[root@docker test]#tree
.
├── 192.168.0.128
│   └── profile.d
│       ├── colorls.csh
│       ├── colorls.sh
│       ├── cvs.csh
│       ├── cvs.sh
│       ├── glib2.csh
│       ├── glib2.sh
│       ├── lang.csh
│       ├── lang.sh
│       ├── less.csh
│       ├── less.sh
│       ├── modules.csh
│       ├── modules.sh
│       ├── vim.csh
│       ├── vim.sh
│       └── which2.sh
└── iplist

2 directories, 16 files

  說明:若未指定文件存放在本地的名字,默認就是存放在當前目錄下以遠程主機ip爲名的目錄下,文件名爲咱們下載遠程主機上的文件名。

  5、pnuke命令的使用

  pnuke命令的功能是能在多個主機上並行殺死進程的程序

命令用法:

pnuke  [-vA]  [-h hosts_file] [-H [user@]host[:port]] [-l user] [-p par] [-o outdir] [-e errdir] [-t timeout] [-O options] [-x args] [-X arg] pattern

  說明:以上選項同pssh選項用法一致

示例:

  殺死遠程主機httpd進程

[root@docker test]#pssh -h iplist -i 'ss -ntl |grep 80' 
[1] 01:17:48 [SUCCESS] root@192.168.0.128
LISTEN     0      128                      :::80                      :::*     
[2] 01:17:48 [SUCCESS] root@192.168.0.218
LISTEN     0      128                      :::80                      :::*     
[3] 01:17:48 [SUCCESS] root@192.168.0.217
LISTEN     0      128         :::80                      :::*                  
[root@docker test]#pnuke -h iplist httpd
[1] 01:18:18 [SUCCESS] root@192.168.0.128
[2] 01:18:19 [SUCCESS] root@192.168.0.217
[3] 01:18:19 [SUCCESS] root@192.168.0.218
[root@docker test]#pssh -h iplist -i 'ss -ntl |grep 80'
[1] 01:18:23 [FAILURE] root@192.168.0.128 Exited with error code 1
[2] 01:18:23 [FAILURE] root@192.168.0.218 Exited with error code 1
[3] 01:18:23 [FAILURE] root@192.168.0.217 Exited with error code 1
[root@docker test]#

  說明:能夠看到咱們過濾httpd監聽的80端口命令執行狀態失敗,說明遠程主機上沒有進程監聽在80端口上。

  6、prsync 命令的使用

  prsync命令的功能是將文件並行複製到多個主機

命令用法:

prsync  [-vAraz] [-h hosts_file] [-H [user@]host[:port]] [-l user] [-p par] [-o outdir] [-e errdir] [-t time‐out] [-O options] [-x args] [-X arg] [-S args] local remote

  說明:以上選項同pssh命令選項相似。

示例:

複製文件到服務器

[root@docker test]#pssh -h iplist -i 'ls -l /root/'
[1] 01:35:19 [SUCCESS] root@192.168.0.128
總用量 4
-rw-r--r-- 1 root root 552 10月 25 05:19 fs
[2] 01:35:19 [SUCCESS] root@192.168.0.218
總用量 4
-rw-r--r--. 1 root root 552 11月  9 01:34 fs
[3] 01:35:19 [SUCCESS] root@192.168.0.217
總用量 4
-rw-r--r--. 1 root root 552 11月  9 01:35 fs
[root@docker test]#prsync -h iplist /etc/inittab /root/init/
[1] 01:35:52 [SUCCESS] root@192.168.0.128
[2] 01:35:52 [SUCCESS] root@192.168.0.218
[3] 01:35:52 [SUCCESS] root@192.168.0.217
[root@docker test]#pssh -h iplist -i 'ls -l /root/'
[1] 01:36:01 [SUCCESS] root@192.168.0.128
總用量 8
-rw-r--r-- 1 root root  552 10月 25 05:19 fs
drwxr-xr-x 2 root root 4096 10月 25 05:19 init
[2] 01:36:01 [SUCCESS] root@192.168.0.218
總用量 8
-rw-r--r--. 1 root root  552 11月  9 01:34 fs
drwxr-xr-x. 2 root root 4096 11月  9 01:35 init
[3] 01:36:01 [SUCCESS] root@192.168.0.217
總用量 4
-rw-r--r--. 1 root root 552 11月  9 01:35 fs
drwxr-xr-x. 2 root root  21 11月  9 01:35 init
[root@docker test]#

  說明:prsync的用法和pscp.pssh的用法相似,它兩的區別在於,pscp.pssh不支持建立目錄(在遠端服務器上若沒有指定目錄,則建立),而prsync支持。pscp.pssh 支持將本地的不一樣多個文件同時複製到遠程服務端,而prsync 不支持。

複製目錄到服務器

[root@docker test]#pssh -h iplist -i 'rm -rf /root/*' 
[1] 01:45:21 [SUCCESS] root@192.168.0.128
[2] 01:45:21 [SUCCESS] root@192.168.0.218
[3] 01:45:21 [SUCCESS] root@192.168.0.217
[root@docker test]#pssh -h iplist -i 'ls -l /root/'        
[1] 01:45:38 [SUCCESS] root@192.168.0.128
總用量 0
[2] 01:45:38 [SUCCESS] root@192.168.0.218
總用量 0
[3] 01:45:38 [SUCCESS] root@192.168.0.217
總用量 0
[root@docker test]#prsync  -r -h iplist /root/scripts/ /root/aaa/
[1] 01:46:20 [SUCCESS] root@192.168.0.128
[2] 01:46:21 [SUCCESS] root@192.168.0.218
[3] 01:46:21 [SUCCESS] root@192.168.0.217
[root@docker test]#pssh -h iplist -i 'ls -l /root/'
[1] 01:46:42 [SUCCESS] root@192.168.0.128
總用量 4
drwxr-xr-x 2 root root 4096 10月 25 05:30 aaa
[2] 01:46:42 [SUCCESS] root@192.168.0.218
總用量 4
drwxr-xr-x. 2 root root 4096 11月  9 01:46 aaa
[3] 01:46:42 [SUCCESS] root@192.168.0.217
總用量 0
drwxr-xr-x. 2 root root 42 11月  9 01:46 aaa
[root@docker test]#

  說明:傳目錄和pscp.pssh用法同樣,須要加-r選項。

相關文章
相關標籤/搜索