當前位置:首頁 » 文件傳輸 » shell在FTP上用什麼模式
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

shell在FTP上用什麼模式

發布時間: 2022-06-27 20:20:49

① 2個linux伺服器間通過ftp同步文件的shell腳步,需要shell腳步,最好能加一點注釋。謝謝

服務之間的數據同步,一般用rsync。
一、伺服器端配置:
# yum -y install xinetd
# vi /etc/xinetd.d/rsync
將如下代碼
service rsync
{
disable = yes
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = –daemon
log_on_failure += USERID
}
中的 disable = yes 改成 disable = no
然後啟動 xinetd
# vi /etc/rsyncd.conf
[backup]
path = /www
auth users = admin
uid = root
gid = root
secrets file = /etc/rsyncd.secrets
read only = no
[伺服器代號]
path = 備份文件路徑
auth users = 授權帳號
uid = 執行時的uid
gid = 執行時的gid
secrets file = 密碼文件位置
read only = 是否只讀
# vi /etc/rsyncd.secrets
admin:1234 #用戶名:密碼

給文件正確的許可權
# chown root:root /etc/rsyncd.secrets
# chmod 600 /etc/rsyncd.secrets
二、client 端進行同步
客戶端默認好像已經裝了rsync,沒有的話裝下:
# yum -y install rsync
執行非同步同步操作:
/usr/bin/rsync -avz –progress [email protected]::backup /www

② shell連接ftp的腳本

區別在於排版不同
你使用<< FTPINI時, 下面的行都要在定格寫,即行開頭不能有空格,直至結束,如
ftp -i -n $ip << FTPINI
cd /pub
ls
FTPINI

而加了-後,下面的行可以加入tab排版,如
ftp -i -n $ip <<-FTPINI
cd /pub
ls
FTPINI

③ FTP採用的是什麼工作模式,可以實現的文件傳輸方式有哪兩種

FTP可以採用2種工作模式,分別是Port模式、Passive模式;

FTP的傳輸有兩種方式:ASCII、二進制:

1、ASCII傳輸方式:

假定用戶正在拷貝的文件包含的簡單ASCII碼文本,如果在遠程機器上運行的不是UNIX,當文件傳輸時ftp通常會自動地調整文件的內容以便於把文件解釋成另外那台計算機存儲文本文件的格式

2、二進制傳輸模式:

在二進制傳輸中,保存文件的位序,以便原始和拷貝的是逐位一一對應的。即使目的地機器上包含位序列的文件是沒意義的。例如,macintosh以二進制方式傳送可執行文件到Windows系統,在對方系統上,此文件不能執行。

(3)shell在FTP上用什麼模式擴展閱讀

FTP文件傳輸協議的特點介紹:

FTP工作在TCP/IP模型的應用層,基於的傳輸協議是TCP,FTP客戶端和伺服器之間的連接是可靠的,面向連接的,為數據的傳輸提供了可靠的保證。

FTP的主要特徵:

1、控制連接是建立在客戶協議解釋器和伺服器協議解釋器之間用於交換命令與應答的通信鏈路

2、數據連接是傳輸數據的全雙工連接。傳輸數據可以發生在伺服器數據傳輸過程DTP和客戶DTP之間,也可以發生在兩個伺服器的DTP之間。

④ linux系統內 怎麼使用shell實現自動上傳文件到ftp伺服器

ftp自動登錄上傳單個文件。
把下面腳本另存為文件加入到crontab中即可實現ftp自動上傳文件。
####把本地/home/databachup/a.sh up ftp /home/databackup 下####
#!/bin/bash
ftp -n<<!
open 192.168.1.171
user guest 123456
binary
cd /home/data
lcd /home/databackup
prompt
put a.sh a.sh
close
bye
!
註解:
1. -n 不受.netrc文件的影響。(ftp默認為讀取.netrc文件中的設定)
2. << 是使用即時文件重定向輸入。
3. !是即時文件的標志它必須成對出現,以標識即時文件的開始和結尾。

⑤ vmware中在linux搭建ftp伺服器 結合shell腳本編程能實現什麼功能

版權聲明:本文為博主原創文章,未經博主允許不得轉載。
① 檢查是否成功安裝ftp相關的rpm軟體 rpm -qa | grep vsftpd

② 如果沒有安裝,那麼用rpm命令安裝,軟體基本上在第二張安裝盤上 命令: rpm -ivh 軟體名
③ 安裝完畢後配置ftp的主配置文件vsftpd.conf,該文件在/etc/vsftpd/文件夾下,打開如下

④ 各條配置(以下內容拷貝自Jack.Tech_StoreRoom的博客)
1.登錄和對匿名用戶的設置
write_enable=YES //是否對登錄用戶開啟寫許可權。屬全局性設置。默認NO
local_enable=YES //是否允許本地用戶登錄FTP伺服器。默認為NO
anonymous_enable=YES //設置是否允許匿名用戶登錄FTP伺服器。默認為YES
ftp_username=ftp //定義匿名用戶的賬戶名稱,默認值為ftp。
no_anon_password=YES //匿名用戶登錄時是否詢問口令。設置為YES,則

⑥ 我在網上找的了一個shell腳本用於給FTP伺服器傳送文件,但是部分內容不懂 求大神賜教

FTPIT只是個標志,你看最後邊還有一個FTPIT,整體是這樣的
ftp -i -n $IP <<FTPIT
...
FTPIT
它就和<<EOF是一樣的,就是代表在前後兩個FTPIT之間的內容傳給ftp命令執行。

⑦ 用shell的linux伺服器 .sh插件怎麼從遠程ftp伺服器下載文件

//ftpput.sh
[cpp] view plain
#!/bin/sh
#FileName:ftpput.sh
#Function:從本地客戶端向ftp伺服器上傳一個文件
#Version:V0.1
#Author:Sunrier
#Date:2012-07-20

#$#表示傳遞給此Shell腳本的參數個數
#-ne表示不等於
if [ $# -ne 2 ]
then
echo "Usage $0 <local_dir/filename> <remote_dir>"
exit 1
fi

#IP表示ftp的伺服器ip地址
IP=127.0.0.1
#IP=192.168.6.1

#FULLNAME獲取本地文件全路徑名
FULLNAME=$1

#DESTDIR獲取需要上傳的ftp遠程目錄路徑
DESTDIR=$2

#basename返回一個路徑中的文件名部分
#如FULLNAME="/home/Sunrier/Proj/log/test.log";
#當local_filename=`basename $FULLNAME`
#最終local_filename="test.log"
local_filename=`basename $FULLNAME`

#DESTFILE表示ftp伺服器的路徑,以及保存後的文件名
DESTFILE=$DESTDIR/$local_filename

#ftp -i -n $IP <<FTPIT
ftp -i -n <<FTPIT
open $IP
user Sunrier redhat
bin
passive
cd /home/remote/log/ftpfile
put $FULLNAME $DESTFILE
quit
FTPIT

exit 0

//注釋:
[cpp] view plain
#!/bin/sh
#FileName:ftpput.sh
#Function:從本地客戶端向ftp伺服器上傳一個文件
#Version:V0.1
#Author:Sunrier
#Date:2012-07-20

#$#表示傳遞給此Shell腳本的參數個數
#-lt表示小於
#-eq表示等於
#-ne表示不等於
if [ $# -ne 2 ]
then
echo "Usage $0 <local_dir/filename> <remote_dir>"
exit 1
fi

#IP表示ftp的伺服器ip地址
#IP=127.0.0.1
IP=192.168.6.1

#FULLNAME獲取本地文件全路徑名
FULLNAME=$1

#DESTDIR獲取需要上傳的ftp遠程目錄路徑
DESTDIR=$2

#basename返回一個路徑中的文件名部分
#如FULLNAME="/home/Sunrier/Proj/log/test.log";
#當local_filename=`basename $FULLNAME`
#最終local_filename="test.log"
local_filename=`basename $FULLNAME`

#DESTFILE表示ftp伺服器的路徑,以及保存後的文件名
DESTFILE=$DESTDIR/$local_filename

#-i表示在多個文件傳輸期間關閉交互提示
#-n表示禁止自動登錄到初始連接
#<<FTPIT 和最後的 FTPIT:術語叫:當前文檔here documents. here document 就是一段特殊目的的代碼塊,
#它使用I/O重定向的形式來將一個命令序列傳遞到一個交互程序或者命令中,比如ftp、cat,或者ex文本編輯器.
#本句可以理解從<<FTPIT開始以非對話模式的ftp連接,直到輸入FTPIT為止的所有命令.
#當然FTPIT這個名字是可以隨便取的,不一定必須是FTPIT,可以取其它的名字。
#ftp -i -n $IP <<FTPIT
ftp -i -n <<FTPIT

#連接到指定ftp伺服器上
open $IP
#連接到指定ftp伺服器上,並指定埠
#open $IP $PORT

#登陸ftp伺服器上的用戶名和密碼
#user username password
user Sunrier redhat

#bin表示以二進制方式傳輸
#bin等價於bi,binary等
#另一種方式傳輸是ascii,默認情況下,將文件傳輸類型設置為ASCII
bin

#主動模式的FTP是指伺服器主動連接客戶端的數據埠,被動模式的FTP是指伺服器被動地等待客戶端連接自己的數據埠
#被動模式的FTP通常用在處於防火牆之後的FTP客戶訪問外界FTP伺服器的情況.
#因為在這種情況下,防火牆通常配置為不允許外界訪問防火牆之後主機,而只允許由防火牆之後的主機發起的連接請求通過.
#因此在這種情況下不能使用主動模式的FTP傳輸,而被動模式的FTP可以良好的工作.
#passive表示設置為被動模式的FTP
passive

#cd表示更改ftp伺服器上(即遠程計算機)的工作目錄
cd /home/remote/log/ftpfile

#lcd表示更改本地計算機的工作目錄
#lcd /home/Sunrier/Proj/log/

#put local_file [ remote_file ]
#其中local_file是指定要復制的本地文件,remote_file是指定要復制的遠程計算機上的文件名,
#remote_file為可選項,如果不指定的話是和本地計算機上的文件名同名.
#put表示把本地路徑下的文件復制到FTP伺服器(遠程計算機)上設置的路徑下的文件
put $FULLNAME $DESTFILE

#quit表示結束與遠程計算機的FTP會話,並退出FTP.
#還有個等價的命令為bye(或by)結束與遠程計算機的FTP會話並退出FTP
quit

#here document塊結束
FTPIT

#正式寫這個Shell腳本時,here document中的#和空行都會執行,
#所以為了消除警告最好去掉here document塊中#開頭的語句以及空行,
#暫時我還沒有找到here document中有效的注釋語句的方法.

exit 0

//ftpget.sh
[cpp] view plain
#!/bin/sh
#FileName:ftpget.sh
#Function:從ftp伺服器上下載一個文件到本地計算機上
#Version:V0.1
#Author:Sunrier
#Date:2012-07-20

#$#表示傳遞給此Shell腳本的參數個數
#-ne表示不等於
if [ $# -ne 2 ]
then
echo "Usage $0 <remote_dir/filename> <local_dir>"
exit 1
fi

#IP表示ftp的伺服器ip地址
IP=127.0.0.1
#IP=192.168.6.1

#FULLNAME獲取從ftp伺服器上下載的文件全路徑名
FULLNAME=$1

#DESTDIR獲取從ftp伺服器上下載的文件所存放的本地計算機的目錄路徑
DESTDIR=$2

#remote_filename獲取從ftp伺服器上下載的文件名
remote_filename=`basename $FULLNAME`

#DESTFILE表示下載文件所存放的本地路徑,以及本地保存後的文件名
DESTFILE=$DESTDIR/$remote_filename

#ftp -i -n $IP <<FTPIT
ftp -i -n <<FTPIT
open $IP
user Sunrier redhat
bin
cd /home/remote/log/ftpfile
get $FULLNAME $DESTFILE
quit
FTPIT

exit 0

#get remote_file [ local_file ]
#remote_file是指定要復制的文件,local_file是指定本地計算機上的文件名,
#local_file為可選項,沒有指定的話則跟remote_file同名。

//20120726改進版本
[cpp] view plain
#!/bin/sh
#FileName:ftpput.sh
#Function:從本地客戶端向ftp伺服器上傳一個文件(添加遠程目錄是否存在判斷功能)
#Version:V0.2
#Author:Sunrier
#Date:2012-07-26

#$#表示傳遞給此Shell腳本的參數個數
#-ne表示不等於
if [ $# -ne 2 ]
then
echo "Usage $0 <local_dir/filename> <remote_dir>"
exit 1
fi

#IP表示ftp的伺服器ip地址
IP=127.0.0.1
#IP=192.168.6.1

#FULLNAME獲取本地文件全路徑名
FULLNAME=$1

#DESTDIR獲取需要上傳的ftp遠程目錄路徑
DESTDIR=$2

#dirname返迴路徑中的目錄部分
#DESTDIR="/home/Sunrier/Proj/log/test.log";
#當PREDESTDIR=`dirname $DESTDIR`
#最終PREDESTDIR="/home/Sunrier/Proj/log"
PREDESTDIR=`dirname $DESTDIR`
SUFFIXDESTDIR=`basename $DESTDIR`

LOCALDIR=`dirname $FULLNAME`

#basename返回一個路徑中的文件名部分
#如FULLNAME="/home/Sunrier/Proj/log/test.log";
#當local_filename=`basename $FULLNAME`
#最終local_filename="test.log"
local_filename=`basename $FULLNAME`

#DESTFILE表示ftp伺服器的路徑,以及保存後的文件名
DESTFILE=$DESTDIR/$local_filename

#ftp -i -n $IP <<FTPIT
ftp -i -n <<FTPIT
open $IP
user Sunrier redhat
dir $PREDESTDIR $LOCALDIR/tmp.txt
quit
FTPIT

#find $LOCALDIR -name "tmp.txt" -type f | xargs grep "^d.*$SUFFIXDESTDIR$"
#find . -name "tmp.txt" -type f | xargs grep "^d.*$SUFFIXDESTDIR$"
#find . ! -name "." -type d -prune -o -type f -iname "*tmp.txt" -print | xargs grep "^d.*$SUFFIXDESTDIR$"
#grep "^d.*$SUFFIXDESTDIR$" \$LOCALDIR/tmp.txt
#grep後面查找字元兩邊加不加引號效果相同

grep ^d.*$SUFFIXDESTDIR$ $LOCALDIR/tmp.txt >/dev/null 2>&1

#$?表示上一個命令的運行結果,0表示成功,其它值表示失敗
#if [ $? != 0 ]
if [ $? -ne 0 ]
then
rm $LOCALDIR/tmp.txt
exit 1
fi

#mkdir創建遠程目錄
#mkdir $DESTDIR

#ftp -i -n $IP <<FTPIT
ftp -i -n <<FTPIT
open $IP
user Sunrier redhat
bin
passive
cd /home/remote/log/ftpfile
put $FULLNAME $DESTFILE
quit
FTPIT

rm $LOCALDIR/tmp.txt
exit 0

[cpp] view plain
注:

FTP伺服器的啟動:
[root@localhost ~]# service vsftpd start
為 vsftpd 啟動 vsftpd: [確定]

FTP伺服器的埠一般默認為21:
[root@localhost ~]# netstat -nat
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:2208 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:523 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:50000 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:601 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:2207 0.0.0.0:* LISTEN
tcp 0 0 :::22 :::* LISTEN
[root@localhost ~]#

在使用system執行Shell腳本時,如system("ftpput.sh"),system返回值低8位為system執行腳本所接收到的信號值,9~16位為Shell腳本所設置的exit退出值

⑧ shell如何獲取ftp應答碼

命令如下:
1.USER:為用戶驗證提供用戶名;
2.PASS:為用戶驗證提供密碼;
3.PWD:輸出FTP伺服器的當前工作目錄;
4.TYPE:設置傳輸的文件類型;
5.SYST:獲取FTP伺服器的操作系統;
6.LIST:獲取FTP伺服器上當前目錄的文件列表;
7.PORT:指定使用主動模式進行數據傳輸;
8.PASV:指定使用被動模式進行數據傳輸;
9.HELP:從FTP伺服器上獲取幫助文件;
10.STOR:從客戶端上傳指定的文件到FTP伺服器;
11.RETR:從FTP伺服器下載指定的文件到客戶端;
12.DELE:刪除FTP伺服器上指定的文件;
13.MKD:在FTP伺服器上新建目錄;
14.RMD:刪除FTP伺服器上的指定目錄;
15.QUIT:退出關閉FTP連接。

⑨ 如何在ftp登陸的shell腳本里加入sleep功能

這樣才行
#/bin/sh

ftp -n 192.168.1.2 <<END
user a a
END
ls
sleep 5
ls

⑩ 如何在ftp命令中使用shell變數

FTP命令跟LINUX的差不多,可以用正常的英文單詞,比如:打開--OPEN,退出---EXIT或QUIT或BAY。你進入文件瀏覽,用LS命令列出當前目錄與文件如DOS的DIR,用DIR有的FTP伺服器也是支持的。另外如果不了解哪個命令,可以直接輸入HELP來獲取幫助的。