『壹』 如何在linux上配置ftp 及創建 ftp用戶
在Internet上FTP(File Transfer Protocol,文件傳輸協議)扮 演著十分重要的角色。我們可以通過FTP與遠程機器傳輸交換文件數 據,下載或上傳最新的軟體。基本的FTP伺服器根據服務的對象可以分為兩 種,一種是Unix(當然也包括Linux)系統基本的FTP伺服器,使用者是伺服器上合法的 用戶;而另一種是匿名FTP伺服器(Anonmous FTP Service),任何人只要使用anonmous或ftp帳號並提供電子郵件地址作為口令就可以使用FTP服務。
對於系統中合法的用戶,其登錄目錄為他們的home目錄;如果是匿名用戶登錄的話,登錄後會到/home/ftp這個目錄中,該除非我們在該目 錄中存放下載文件,否則匿名FTP使用者將不能做任何事情。在本章,我們將詳細地介紹FTP伺服器的安裝、配置以及服務 器的維護。
安裝FTP伺服器
在Linux的發行套件中都有FTP伺服器的軟體包wu-ftpd(Washington University FTP server),這是目前最流行的一種免費FTP伺服器軟體,目前絕大多數的FTP站點都是由wu-ftpd來架設的,而wu-ftp如此流行的原因是因 為它強大的功能,例如:
·可控制不同網域的機器對 FTP伺服器的存取許可權和訪問時段。
·使用者在下載文件時,可自動對文件進 行壓縮或解壓縮工作。
·可以記錄文件上傳或下載的過程。
·可以限制最高訪問人數,以維持系統的最佳運行效率。
·可顯示相關的信息,以便用戶了解當前的接收狀態。
·可暫時關閉FTP伺服器,以便系統維護。
在安裝系統時如果選擇了wu-ftpd軟體包,就會自動安裝。但如果我們想要使用最新的FTP軟體包的話,可以到全世界各大FTP站點下載。目 前最新的版本是wu-ftpd-2.5.0,得到了wu-ftpd-2.5.0.tar.gz後,請按照我們下面的步驟進行安裝。
1.將wu-ftpd-2.5.0.tar.gz復制到臨時目錄中並解壓縮:
# tar zxvf wu-ftpd-2.5.0.tar.gz
進入解壓縮產生的目錄wu-ftpd-2.5.0中,在開始安裝之前請仔細閱讀裡面的README、INSTALL等文件,以便了解安裝需要注 意的事項。
2.執行命令「bulid lnx」,編譯wu-ftpd-2.5.0的源程序。
# ./bulid lnx
這條命令將編譯Linux系統使用wu-ftpd所需的服務程序,如果一切正常的話,將產生如下幾個可執行文件:
ftpd FTP服務程序
ftpshut 關閉FTP服務的程序
ftpcount 顯示FTP 伺服器目前連接的人數的程序
ftpwho 查看目前使用者
3.執行安裝命令「make install」,將編譯生成的可執行文件和man pages安裝到系統中。
# make install
4. 修改/etc/inetd.conf文件,加入如下一行:
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l –a
如果系統中以前安裝有wu-ftpd的話,這一步可以略去不做,安裝安裝程序會自動更新/etc/inetd.conf文件有關ftp的記錄 項。
5.如果想為FTP用戶提供壓縮解壓縮的功能,我們還需要將tar、gzip、compress、cpio、sh等可執行文件復制到/home /ftp/bin目錄下。此外,還需要將ls命令復制到/home/ftp/bin中,以便使用者查看目錄。
因為我們復制到/home/ftp/bin目錄下的程序有可能是動態鏈接的,所以它們運行時還需要共享函數庫,我們要將他們運行時需要用到的共 享庫復制到/home/frp/lib目錄中。檢查這些命令所需要的共享庫可以使用「ldd」命令。例如對於「ls」命令,我們使用「ldd /usr/bin/ls」命令就可以得到如下的輸出:
# ldd /usr/bin/ls
libc.so.6 = > /lib/libc.so.6 ( 0x40003000 )
/lib/ld-linux.so.2 = > /lib/ld-linux.so.2 ( 0x00000000 )
這樣,我們就需要將/lib/libc.so.6和/lib/ld-linux.so.2復制到/home/ftp/lib目錄中。其它命令所 需的共享庫您也可以參照上面的方法找出並復制到/home/etc/lib目錄中。
接下來復制/etc/passwd和/etc/group文件到/home/ftp/etc,並刪除其中任何個人用戶和個人用戶組的信息。基本 上應該按照下面的例子修改:
#/home/ftp/etc/passwd文件
root:*:0:0:::
bin:*:1:1:::
operator:*:11:0:::
nobody:*:99:99:::
ftp:*:1000:1000:::
# /home/ftp/etc/group文件
root::0:
bin::1:
daemon::2:
sys::3:
adm::4:
ftp::1000:
6.為了確保提供FTP服務不會給我們的系統帶來安全隱患,我們還需要採取以 下措施:
# chmod 0555 /home/ftp
# chmod 0111 /home/ftp/bin/*
# chmod 0555 /home/ftp/lib/*
# chmid 0444 /home/ftp/etc/*
配置FTP伺服器
在安裝好wu-ftpd之後,我們還需要定製FTP伺服器,使之實現我們上一節中提到的各種功能。為了使我們的FTP伺服器實現這些功能,我們 需要修改ftpusers、ftpaccess、ftpconversions、xferlog、ftpgroups、ftphosts等系統配置文件。 下面我們就來看一看這些文件的功能以及配置它們的方法。
各配置文件的功能
在開始配置FTP伺服器的配置文件之前,我們先來簡要地介紹一下各個文件的功能。在開包後的wu-ftpd-2.5.0目錄中的 doc/examples目錄下,我們可以找到以下這些文件的示例。
/etc/ftpaccess 一般情況下,我們最為重視的配置文件應該是「ftpaccess」,因為該文件決定著我們FTP伺服器是否能夠正常工作。此外,我們還可以在這個系統參數 文件中設置多項有關使用許可權記錄,以及與信息有關的文件名稱及路徑。
/etc/ftpusers 決定哪些人不可以執行ftp命令來傳輸文件,這些帳號通常是root、bin、news以及guest等有特殊用途的帳戶。
/etc/ftpconversions 配置該文件可以實現用戶在通過FTP傳輸文件的同時,對文件進行壓縮打包等處理。
/etc/ftphosts 決定哪些網路中的主機或某些用戶不能訪問FTP伺服器的文件。
/etc/ftpgroups 該文件不是決定哪些用戶組不能夠訪問FTP伺服器,它只有在使用SITE GROUP功能時才有用。
/var/log/xferlog FTP日誌文件。該文件將記錄使用匿名帳戶的用戶所上傳或下載的過的文件,該文件只是記錄FTP信息,我們不需要對它進行配置。
大致了解了各個設置文件的功能以後,我們就來為您介紹這些文件中的內容以及學習如何配置。
配置/etc/ftpaccess文件
我們前面介紹的wu-ftpd的大多數功能都是在ftpaccess文件中設置的。我們無須自己編寫該文件,doc/examples /ftpaccess.heavy是一個稍微修改一下就能適用於大多數FTP伺服器的例子,所以下面我們將以這個示例文件為例為您介紹ftpaccess 文件的配置。
# wu-ftpd-2.5.0的/etc/ftpaccess示例文件ftpaccess.heavy
#
# 設置用戶登錄FTP伺服器時,允許輸錯密碼的次數。
# loginfails 2表示允許用戶輸錯兩次密碼,如果兩次都輸入
# 錯誤的話,FTP伺服器列印「repeated login failures」的信息
# 並退出FTP會話過程。如不設置,則預設值是5。
#
loginfails 2
#
# class是用來定義用戶級別的命令,它的格式為
# class <class> <typelist> <addrglob> [ <addrglob>….]
# FTP伺服器上有三種類型的使用者,分別是「real」——表示
# 在該FTP伺服器上有合法帳號的用戶;「guest」——表示另行
# 定義的某些使用組的使用者;「anonymous」——許可權最低的匿名
# 用戶。有了這三種使用者以後,在ftpaccess文件中就可以根據不
# 同的使用者設置不同的存取許可權。但是,只有三種定義一般是不夠
# 的,我們可以根據class的語法定義更多的控制命令。例如:
# class remote real,guest,anonymous *
# 這條class語句定義了remote中有三種不同的使用者,「*」表示網路
# 上所有的計算機,也就是說任何人都可以訪問FTP伺服器,一般的匿名
# FTP站點都應該有這一項。如果我們希望某台主機或網域中的機器具有
# 特殊的許可權,那麼我們可以設置如下的class:
# class local real,guest,anonymous localhost
# 這表示本地主機的類別被定義為local,當我們從主機連上FTP伺服器上
# 時,就可以用較為特別的許可權。
# 下面是ftpaccess.heavy文件指定的兩個class,它們的意思是來自*.domain
# 和本地主機被歸為local組,而其它的主機則是remote組。
#
class local real,guest,anonymous *.domain 0.0.0.0
class remote real,guest,anonymous *
#
# 我們可以使用limit命令設置某個時間段的FTP用戶數量,如果超出了
# 規定的人數,則列印/etc/msgs/msgs.toomany文件並拒絕用戶登錄。例如:
# limit local 20 Any /etc/msgs/msgs.roomany
# 就是限制local這個組的機器同時間內最多允許20人連接FTP伺服器,如果
# 超員,則列印/etc/msgs/msgs.toomany文件,顯示當前在線人數太多。ftp的
# 說明文件都可以包含變數,在說明文件中可以使用「變數替換(magic
# sookies)」以指定的字元串代替某個變數:
# %T 本地時間
# %F CWD所在分區的剩餘空間
# %C 當前工作目錄
# %E 定義在ftpaccess文件中維護者的電子郵件地址
# %R 遠端主機名稱
# %L 本地主機名稱
# %U 登錄時所給的用戶名稱
# %M 該class允許的最大使用者數目
# %N 該class目前的使用者數目
#
# 我們可以利用這些變數編輯一個顯示信息非常完善的說明文件。下面的
# 例子是設置當local用戶在任何時候不能超過20人,remote用戶在周六
# 周日的18:00到6:00不能超過100人,否則將顯示/etc/msgs目錄下的
# msg.toomany文件的內容。
#
limit local 20 Any /etc/msgs/msg.toomany
limit remote 100 SaSu|Any1800-0600 /etc/msgs/msg.toomany
limit remote 60 Any /etc/msgs/msg.toomany
#
# readme命令的作用是指定用戶登錄或進行其它操作(如更換目錄)時
# FTP伺服器提示用戶閱讀的文件。
#
readme README* login
readme README* cwd=*
#
# messages命令主要是設置一些FTP的顯示信息,如下面的「message
# /welcome.msg login」就是代表用戶登錄時,將顯示/home/ftp目錄下的
# welcome.msg作為進站畫面。我們要提醒您的是FTP伺服器都是以
# /home/ftp這個目錄作為根目錄的,所以要寫成/welcome.msg。而
# 「message .message cwd=*」則是定義用戶在更換目錄時將顯示在目錄
# 下的文件。
#
message /welcome.msg login
message .message cwd=*
#
# 下面定義的允許從local和remote登錄的機器在傳輸文件時,可執行compress
# 壓縮文件或使用tar命令將多個文件打包成一個文件。
#
compress yes local remote
tar yes local remote
#
# 是否允許通過SITE GROUP和SITE GPASS命令適用秘密文件
# allow use of private file for SITE GROUP and SITE GPASS?
#
private yes
#
# 設置密碼檢查的規則。FTP伺服器將要求匿名用戶使用其電子郵件
# 地址作為密碼,可是有人還是會胡亂輸入,所以我們可以使用passwd-check
# 來查看用戶是否輸入一個類似於user@hostname的E- mail地址:none表
# 示不進行密碼檢查; trivial表示密碼必須含有「@」;而使用rfc822時,
# 表示密碼必須滿足rfc822規定的地址。當密碼不合要求時,warn將給予
# 警告,但依然允許他們登錄,而enforce則表示警告並使用戶退出。
#
# passwd-check <none|trivial|rfc822> [<enforce|warn>]
passwd-check rfc822 warn
#
# log commands <typelist>記錄<typelist>類型(可以是anonymous、
# guest和real)用戶使用的命令。Log transfer <typelist> <directions>
# 記錄<typelist>類型的用戶做的<directions>(可以為inbound傳進伺服器、
# outbound傳出伺服器)方向的文件傳輸。
#
log commands real
log transfers anonymous,real inbound,outbound
#
# 如果shutdown<path>指定的文件存在,FTP伺服器將定期檢查<path>文件
# 以查看伺服器是否預定關閉。<path>文件的格式為:
# <year> <month> <day> <hour> <minute> <deny_offset> <disc_offset> <text>
# <deny_offset>和<disc_offset>的意思是在伺服器關閉前多長時間新的登錄
# 請求和現存的連接將被拒絕和終止。<text>是對拒絕連接的用戶的一段信息。
# 如:
# 1999 10 25 00:00 0010 0005
# System shutdown at %s
# 表示1999年10月25日00:00關閉FTP伺服器,10分鍾以前拒絕連接,5分鍾
# 以前中斷正在連接的FTP服務。外部程序ftpshut可以用來產生<path>文件,
# 例如上面的文件可以通過如下的命令來產生:
# ftpshut 0000
#
shutdown /etc/shutmsg
#
# 設置用戶在FTP伺服器上可以使用的命令,我們可以看到下面所有的
# 命令後面都是「no」,也就是說guest用戶不能使用delete、overwrite、
# rename命令,而anonymous則都不能使用。只有real用戶可以使用這些命令。
# all the following default to "yes" for everybody
#
delete no guest,anonymous # delete permission?
overwrite no guest,anonymous # overwrite permission?
rename no guest,anonymous # rename permission?
chmod no anonymous # chmod permission?
umask no anonymous # umask permission?
#
# 設置用戶上傳文件的目錄。下面例子中/var/ftp目錄下的/incoming目錄可以
# 用來上傳文件,上傳文件的屬主是root,組別是daemon,讀取許可權是0600,
# dirs表示在/incoming目錄中可以創建子目錄。
# specify the upload directory information
#
upload /var/ftp * no nobody nogroup 0000 nodirs
upload /var/ftp /bin no
upload /var/ftp /etc no
upload /var/ftp /incoming yes root daemon 0600 dirs
#
# 為/incoming目錄設置路徑別名為inc:,用戶在任何時候只要使用命令
# 「cd inc:」就可以到達/incoming目錄。
# directory aliases... [note, the ":" is not required]
#
alias inc: /incoming
# cdpath主要定義在改變目錄時使用的搜索路徑。如果我們定義:
# cdpath /incoming/test、cdpath /pub、cdpath /,那麼用戶在任意路徑
# 隨便cd到一個目錄,比如cd test,那麼將依次搜尋:
# /incoming/test
# /pub/test
# /test
# 以尋找一個符合test目錄的路徑。
#
cdpath /incoming
cdpath /pub
cdpath /
#
# path-filter的功能是檢查用戶上傳文件的文件名是否合法,如下面
# 第一條命令就是指定所有的匿名用戶上傳文件的文件名只能是以
# A-Z、a-z、0-9以及「._-」組成,而不能以一個「.」或是一個「-」開始。
# 如果文件名不合法,將顯示/etc/pathmsg給該用戶。
#
path-filter anonymous /etc/pathmsg ^[-A-Za-z0-9_.]*$ ^. ^-
path-filter guest /etc/pathmsg ^[-A-Za-z0-9_.]*$ ^. ^-
#
# 設置guest用戶
# specify which group of users will be treated as "guests".
#
guestgroup ftponly
#
# FTP伺服器管理員的郵件地址
#
email user@hostname
以上是一些ftpaccess常用的設置,您也可以參考ftpaccess的man pagse來獲得更詳細的配置信息。
配置/etc/ftpusers和/etc/ftphosts文件
通過ftpusers文件,我們可以限制系統中有哪些用戶不能使用ftp服務,ftphosts文件與之類似,所不同的是該文件中記錄的是不能 訪問FTP伺服器的主機。通常這樣做的目的都是出於系統安全的考慮。Wu-ftpd 為我們准備有這兩個文件的示例,我們可以在examples 目錄中找到它們。下面是ftpusers文件設置的例子:
# 禁止使用FTP服務的用戶
root
bin
boot
daemon
digital
field
gateway
guest
nobody
operator
ris
sccs
sys
uucp
限制這些用戶使用FTP伺服器主要是基於系統安全的考慮,避免權利過大的用戶(如root、ftpadm)登錄FTP伺服器和避免使用系統命令作為 帳號(如shutdown、sync),以避免系統管理上的困惑。我們可以根據自己使用的需要,向該文件中增加或刪除用戶並將它復制到/etc目錄中。
如果我們要架設的是匿名FTP伺服器,那麼通常不需要設置ftphosts文件,對於其它類型的FTP伺服器可以參考 examples/ftphosts文件的格式結合自己的情況加以修改,然後復制到/etc目錄中即可。下面是examples/ftphosts文件, 該文件允許網路somehost.domain中的用戶ftp訪問FTP伺服器(somehost.domain可以是IP地址或域名)而禁止網路 otherhost.domain和網路131.211.32.*中的用戶fred使用FTP服務。
#
# ftphosts文件配置示例,allow和deny的格式分別為:
# allow <username> <hostname or domain>
# deny <username> <hostname or domain>
#
# 以「#」開頭的均為注釋,空行將被忽略
#
allow ftp somehost.domain
deny fred otherhost.domain 131.211.32.*
配置/etc/ftpconversions文件
ftpconversions文件主要定義用戶從FTP伺服器中下載文件時對文件進行格式轉換的規則。例如壓縮、解壓縮、打包和開包等操作,這 樣用戶就不必為.tar.gz、.tgz、.Z、.z之類的文件傷腦筋了。Ftpconversions文件的格式初看上去很復雜,不過不用擔 心,/examples目錄中也有該文件的例子,我們只要原封不動的將它復制到/etc目錄中就能滿足我們的使用需要了。下面讓我們來看看 ftpconversions文件中各個記錄項,有關各項的說明我們羅列在表14-1中:
#
# ftpconversions文件示例
#
#
:.Z: : :/bin/compress -d -c %s:T_REG|T_ASCII:O_UNCOMPRESS:UNCOMPRESS
: : :.Z:/bin/compress -c %s:T_REG:O_COMPRESS:COMPRESS
:.gz: : :/bin/gzip -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:GUNZIP
: : :.gz:/bin/gzip -9 -c %s:T_REG:O_COMPRESS:GZIP
: : :.tar:/bin/tar -c -f - %s:T_REG|T_DIR:O_TAR:TAR
: : :.tar.Z:/bin/tar -c -Z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+COMPRESS
: : :.tar.gz:/bin/tar -c -z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+GZIP
: : :.crc:/bin/cksum %s:T_REG::CKSUM
: : :.md5:/bin/md5sum %s:T_REG::MD5SUM
表1 ftpconversions文件各項說明對照表
真實文件名
目標文件名
命令操作
<filename>.Z
<filename>
傳遞前使用comprss –d命令壓縮
<filename>.gz
<filename>
傳遞前使用gzip –d命令壓縮
<filename>
<filename>.Z
傳遞前使用compress 命令壓縮
<filename>
<filename>.gz
傳遞前使用gzip –9命令壓縮
<filename>
<filename>.tar
傳遞前使用tar –cf命令打包
<filename>
<filename>.tar.Z
傳遞前使用tar –cZf命令打包並壓縮
<filename>
<filename>tar.gz
傳遞前使用tar –czf命令打包並壓縮
<directory>
<directory>.tar.Z
傳遞前使用tar –cZf命令對目錄打包並壓縮
<directory>
<directory>.tar.gz
傳遞前使用tar –czf命令對目錄打包並壓縮
Ftpconversions文件基本上把常用的壓縮,打包命令都包括在內了,我們只要將它復制到/etc目錄中,以後只要有人訪問我們的 FTP伺服器,FTP服務程序就會根據用戶的需要執行壓縮或打包的命令。例如,用戶想下載目錄Howto中所有的文件,那麼他不必使用mget命令,而只 要使用get Howto.tar.gz,這時wu-ftpd就會將該目錄打包壓縮並發送到用戶的機器上了。所以使用該文件可以完成壓縮傳遞的數據量,減少傳輸時間等作 用。此外ftpconversions文件中定義的可執行文件的位置/bin指的都是/home/ftp/bin而不是Lnux /目錄下的bin,所以請檢查/home/ftp/bin目錄中有無上述命令,如果沒有還需要將這些程序復制到該目錄中。
截止到這里,匿名FTP伺服器的架設工作基本上就完成了,我們可以用ftp命令連接自己的伺服器,檢查合法用戶和匿名用戶的連接情況以及各個目 錄的許可權是否正確。之後就可以准備FTP服務的開張了。
查看全部更多資料去591cto
『貳』 請教Qt5下qtftp的編譯問題
注意編譯器一定枝喚鍵要和MYSQL的平台鏈褲版本一致,32位的用32位的編譯猛巧器編譯,64位的用64位的編譯器編譯。 准備工作:MYSQL的目錄:D:\SQL_Server\mariadb Qt5.1.1
『叄』 C# ASP.net FTP上傳功能本地編譯沒問題,網站發布後通過網址訪問再用此功能報404錯誤
404 錯誤意味著鏈接指向的網頁不存在,即原始網頁的URL失效,這種情況經常會發生,很難避免,比如說:網頁URL生成規則改變、網頁文件更名或移動位置、導入鏈接拼寫錯誤等,導致原來的URL地址無法訪問;當Web 伺服器接到類似請求時,會返回一個404 狀態碼,告訴瀏覽器要請求的資源並不存在。
導致這個錯誤的原因一般來說,有三種:
1、無法在所請求的埠上訪問Web站點。
2、Web服務擴展鎖定策略阻止本請求。
3、MIME映射策略阻止本請求。
解決辦法:
1. 對於存在的網頁內容由於路徑改變而導致訪問不了時,可在IIS 中定義404錯誤指向一個動態頁面,在頁面裡面使用301永久重定向跳轉到新的地址,此時伺服器返回301狀態碼。
2、設置404指向一個設計好的html文件,
此時頁面返回的404狀態碼。
idc提供商基本都提供404設置的功能,直接上傳文件設置即可。在IIs中設置方法:打開IIS管理器-->點擊要設置自定義404的網站的屬性
-->點擊自定義錯誤選項-->選中404頁-->選中並打開編輯屬性-->設置成 URL --> URL
里填寫「/err404.html」-->按確定退出再把做好的err404.html
頁面上傳到網站根目錄下。此處在「消息類型」中一定要選擇「文件」或「默認值」,而不要選擇「URL」,不然,將導致返回「200」狀態碼。
3、404指向一個動態頁面,
比如error.asp,如果不在頁面裡面進行設置,僅僅是返回提示的HTML 代碼,將導致頁面返回200
狀態碼,這是不正確的,我們可以在顯示完提示內容後,增加語句: Response.Status="404 Not Found"
,這樣就保證頁面返回404狀態碼。
4、Apache下設置404錯誤頁面。為Apache Server設置404錯誤頁面的方法很簡單,只需在.htaccess 文件中加入如下內容即可,ErrorDocument 404 /notfound.php
『肆』 高分求Delhpi編譯的FTP源代碼!~~
Delphi FTP例子源碼
unit TransferThread;
/////////////////////////////////////陪談////////////////////////////啟差///////////////
// 模塊說明: FTP傳輸核心模塊類
// 功能: 指定一個下載悄亂皮(上傳)的日期或文件名,系統執行傳輸功能(支持續傳)
// 備註:該模塊屬於傳輸類的一個子線程模塊.
////////////////////////////////////////////////////////////////////////////////
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ComCtrls,StdCtrls,IniFiles,IdIntercept, IdLogBase, IdLogEvent, IdAntiFreezeBase,
IdAntiFreeze, IdFTPList,IdBaseComponent,IdGlobal,IdComponent, IdTCPConnection, IdTCPClient,IdFTPCommon,
IdFTP;
type
TTransferThread = class(TObject)
private
{ Private declarations }
//進度顯示
FProgressbar:TProgressbar;
//上傳核心組件
FFTP:TIdFTP;
//上傳列表內部類
FCombobox:TCombobox;
//上傳信息顯示
FLabel:TLabel;
//FTP地址
FFTP_STR_HOST:String;
//FTP用戶名
FFTP_STR_USN:String;
//FTP用戶密碼
FFTP_STR_PWD:String;
//FTP埠
FFTP_STR_PORT:String;
//FTP上傳標記
FFTP_STR_UTAG:String;
//FTP下載標記
FFTP_STR_DTAG:String;
//FTP指定的文件夾
FFTP_STR_FLODER:STring;
//傳輸文件大小
FFTP_LWD_BYTES:LongWord;
//傳輸開始時間
FFTP_DT_BEGINTIME:TDateTime;
//傳輸速度
FFTP_DUB_SPEED:Double;
//是否刪除源文件.
FFTP_BOL_DEL:Boolean;
//是否正在傳輸文件
FFTP_BOL_ISTRANSFERRING:Boolean;
//類內部通用對話框函數
function MsgBox(Msg:string;iValue:integer):integer;
//獲取用戶當前的Windows臨時文件夾
function GetWinTempPath:String;
//根據日期生成的日期文件名
function DateToFileName(DateTime:TDateTime):String;
//根據上傳/下載標記生成完整的文件名
function GetFileFullName(sTag:String;DateTime:TDateTime):String;
protected
//傳輸核心函數
function TransferKernel(iTag:Integer;sFile:string;bDelSFile:boolean=False):boolean;
//傳輸組件的WorkBegin事件
procere FFTPOnWorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer);
//傳輸組件的WorkEnd事件
procere FFTPOnWorkEnd(Sender: TObject; AWorkMode: TWorkMode);
//傳輸組件的Work事件
procere FFTPOnWork(Sender: TObject; AWorkMode: TWorkMode;const AWorkCount: Integer);
public
//構造函數
constructor Create;
//析構函數
destructor Destroy;
//進度條控制項屬性
property Progressbar:TProgressbar read FProgressbar write FProgressbar default nil;
//列表控制項屬性
property Combobox:TCombobox read FCombobox write FCombobox default nil;
//只讀的FTP核心組件
property FTP:TidFTP read FFTP;
//標簽控制項
property oLabel:TLabel read FLabel write FLabel default nil;
//列表方法(該方法需要指定Combobox,否則無效)
procere List;
//依據日期下載文件
procere DownLoad(dDate:TDateTime);overload;
//依據文件名下載文件
procere DownLoad(sFileName:String);overload;
//依據日期上傳文件
procere UpLoad(dDate:TDateTime);overload;
//依據文件名上傳文件
procere UpLoad(sFileName:String);overload;
// procere Execute; override;
end;
implementation
constructor TTransferThread.Create;
var
FFini:TIniFile;
FFilePath:String;
begin
//完成FTP相關參數的讀取.
FFTP_BOL_ISTRANSFERRING:=False;
Try
FFilePath:=ExtractFilePath(APPlication.exeName)+'setup.ini';
FFini:=TIniFile.Create(FFilePath);
FFTP_STR_HOST:=FFini.ReadString('文件傳輸','伺服器地址','');
FFTP_STR_PORT:=FFini.ReadString('文件傳輸','伺服器埠','');
FFTP_STR_USN:=FFini.ReadString('文件傳輸','用戶名','');
FFTP_STR_PWD:=FFini.ReadString('文件傳輸','密碼','');
FFTP_STR_FLODER:=FFini.ReadString('文件傳輸','文件夾','');
FFTP_STR_UTAG:=FFini.ReadString('文件傳輸','上傳標識碼','');
FFTP_STR_DTAG:=FFini.ReadString('文件傳輸','上傳標識碼','');
FFTP_BOL_DEL:=FFini.ReadBool('文件傳輸','刪源文件',FALSE);
FFIni.Free;
Except
MsgBox('讀取FTP連接配置信息失敗!請檢查您的Setup.ini文件.',MB_OK+MB_ICONERROR);
Exit;
Abort;
End;
//設置FTP相關參數
Try
FFTP:=TIdFTP.Create(nil);
FFTP.Host:=FFTP_STR_HOST;
FFTP.Port:=strtoint(FFTP_STR_PORT);
FFTP.UserName:=FFTP_STR_USN;
FFTP.Password:=FFTP_STR_PWD;
FFTP.TransferType:=ftASCII;
//事件驅動
FFTP.OnWork:=FFTPOnWork;
FFTP.OnWorkBegin:=FFTPOnWorkBegin;
FFTP.OnWorkEnd:=FFTPOnWorkEnd;
FFTP.Connect(True,-1);
Except
MsgBox('連接遠程FTP伺服器失敗!'#10#13'1.伺服器地址錯誤,或伺服器不可用.'#10#13'2.用戶名或密碼不正確.'#10#13'3.FTP服務埠設置不正確.',MB_OK+MB_ICONERROR);
Exit;
Abort;
End;
end;
function TTransferThread.DateToFileName(DateTime: TDateTime): String;
var
Year, Month, Day:Word;
sYear,sMonth,sDay:String;
begin
DecodeDate(DateTime, Year, Month, Day); //日期
sYear:=inttostr(Year);
sMonth:=inttostr(Month);
sDay:=inttostr(Day);
//年
case Length(sYear) of
4: sYear:=sYear;
3: sYear:='0'+sYear;
2: sYear:='00'+sYear;
1: sYear:='000'+sYear;
else
sYear:='';
end;
//月
case Length(sMonth) of
2: sMonth:=sMonth;
1: sMonth:='0'+sMonth;
else
sMonth:='';
end;
//日
case Length(sDay) of
2: sDay:=sDay;
1: sDay:='0'+sDay;
else
sDay:='';
end;
if (sYear='') or (sMonth='') or (sDay='') then
begin
Result:='';
Exit;
end;
if (sYear<>'') and (sMonth<>'') and (sDay<>'') then
begin
Result:=sYear+sMOnth+sDay;
end;
end;
destructor TTransferThread.Destroy;
begin
FProgressbar:=nil;
FCombobox:=nil;
FLabel:=nil;
FFTP.Quit;
FFTP.Free;
end;
procere TTransferThread.DownLoad(dDate: TDateTime);
begin
if Not FFTP_BOL_ISTRANSFERRING then
begin
TransferKernel(1,GetFileFullName(FFTP_STR_DTAG,dDate),FFTP_BOL_DEL);
end;
end;
procere TTransferThread.DownLoad(sFileName: String);
begin
if Not FFTP_BOL_ISTRANSFERRING then
TransferKernel(1,sFileName,FFTP_BOL_DEL);
end;
procere TTransferThread.FFTPOnWork(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
var
S,E: String;
H, M, Sec, MS: Word;
TotalTime: TDateTime;
DLTime: Double;
begin
TotalTime := Now - FFTP_DT_BEGINTIME; //總用時
DecodeTime(TotalTime, H, M, Sec, MS); //取出時\分\秒\毫秒
Sec := Sec + M * 60 + H * 3600; //轉換成秒
DLTime := Sec + MS / 1000; //最終的下載時間
E:= Format(' 使用時間:%2d:%2d:%2d', [Sec div 3600, (Sec div 60) mod 60, Sec mod 60]);
if DLTime > 0 then
//每秒的平均速度:XX K/s
FFTP_DUB_SPEED := {(AverageSpeed + }(AWorkCount / 1024) / DLTime{) / 2};
if FFTP_DUB_SPEED > 0 then
begin
Sec := Trunc(((FFTP_LWD_BYTES - AWorkCount) / 1024) / FFTP_DUB_SPEED);
S := Format(' 剩餘時間:%2d:%2d:%2d', [Sec div 3600, (Sec div 60) mod 60, Sec mod 60]);
S:='速度: ' + FormatFloat('0.00 KB/秒',FFTP_DUB_SPEED) + S + E ;
end
else
S:='';
if (FLabel<>nil) and (assigned(FLabel)) then
begin
FLabel.AutoSize:=True;
FLabel.Caption:=S;
FLabel.Update;
end;
if (FProgressBar<>nil) and (assigned(FProgressBar)) then
begin
FProgressBar.Position:=AWorkCount; //進度顯示
FProgressBar.Update;
end;
end;
procere TTransferThread.FFTPOnWorkBegin(Sender: TObject;
AWorkMode: TWorkMode; const AWorkCountMax: Integer);
begin
FFTP_BOL_ISTRANSFERRING:=True;
FFTP_DT_BEGINTIME:=Now; //開始時間
FFTP_DUB_SPEED:=0.0; //初始化速率
if (FProgressBar<>nil) and (assigned(FProgressBar)) then
begin
if AWorkCountMax>0 then
begin
FProgressBar.Max:=AWorkCountMax;
FFTP_LWD_BYTES:=FProgressBar.Max;
end
else
FProgressBar.Max:=FFTP_LWD_BYTES;
end;
end;
procere TTransferThread.FFTPOnWorkEnd(Sender: TObject;
AWorkMode: TWorkMode);
begin
FFTP_BOL_ISTRANSFERRING:=False;
FFTP_DUB_SPEED:=0.00;
if (FLabel<>nil) and (assigned(FLabel)) then
begin
FLabel.AutoSize:=True;
FLabel.Caption:='';
FLabel.Update;
end;
if (FProgressBar<>nil) and (assigned(FProgressBar)) then
begin
FProgressBar.Position:=0;
end;
end;
function TTransferThread.GetFileFullName(sTag:String;DateTime:TDateTime):String;
begin
Result:=sTag+DateToFileName(DateTime)+'FD.HXD';
end;
function TTransferThread.GetWinTempPath: String;
var
TempDir:array [0..255] of char;
begin
GetTempPath(255,@TempDir);
Result:=strPas(TempDir);
end;
procere TTransferThread.List;
var
Dir_List:TStringList;
FoundFolder:Boolean;
iCount:Integer;
begin
if (FCombobox=nil) or (Not Assigned(FCombobox)) then
begin
Exit;
Abort;
end;
Dir_List:=TStringList.Create; //創建字元串列表類
Try
if Not FFTP.Connected then FFTP.Connect;
FFTP.ChangeDir('/');//根目錄 //到伺服器的根目錄
FFTP.List(Dir_List,'',True); //獲取目錄列表
FoundFolder:=False;
FFTP.TransferType:=ftASCII; //更改傳輸類型(ASCII類型)
for iCount:=0 to Dir_List.Count-1 do
begin
if FFTP.DirectoryListing.Items[iCount].ItemType=ditDirectory then
begin
if Dir_List.IndexOf(FFTP_STR_FLODER)= -1 then //判斷該文件夾不存在
begin
//如果不存繼續循環查找.
Continue;
end
else
begin
//如果存在,則直接退出循環
FoundFolder:=True;
Break;
end;
end;
end;
if FoundFolder then //判斷該文件夾不存在
begin
FFTP.MakeDir(FFTP_STR_FLODER); //不存在,則創建一個新的文件夾
end;
FFTP.ChangeDir(FFTP_STR_FLODER);
FFTP.List(Dir_List,'*.HXD',False);
if Dir_List.Count>0 then
begin
FCombobox.Items:=Dir_List;
end;
Finally
Dir_List.Free;
End;
end;
function TTransferThread.MsgBox(Msg: string; iValue: integer): integer;
begin
Result:=MessageBox(application.Handle,pChar(Msg),'系統信息',iValue+MB_APPLMODAL);
end;
function TTransferThread.TransferKernel(iTag: Integer; sFile: string;
bDelSFile: boolean): boolean;
var
sTmpPath:String;
Dir_List:TStringList;
FoundFolder:Boolean;
iCount:Integer;
begin
sTmpPath:=GetWinTempPath; //獲取本地系統臨時目錄
Dir_List:=TStringList.Create; //創建字元串列表類
Try
if Not FFTP.Connected then FFTP.Connect;
FFTP.ChangeDir('/');//根目錄 //到伺服器的根目錄
FFTP.TransferType:=ftASCII; //更改傳輸類型(ASCII類型)
FFTP.List(Dir_List,'',True); //獲取目錄列表
FoundFolder:=False;
for iCount:=0 to Dir_List.Count-1 do
begin
if FFTP.DirectoryListing.Items[iCount].ItemType=ditDirectory then //是目錄
begin
if Dir_List.IndexOf(FFTP_STR_FLODER)= -1 then //判斷該文件夾不存在
begin
//如果不存繼續循環查找.
Continue;
end
else
begin
//如果存在,則直接退出循環
FoundFolder:=True;
Break;
end;
end;
end;
if FoundFolder then //判斷該文件夾不存在
begin
FFTP.MakeDir(FFTP_STR_FLODER); //不存在,則創建一個新的文件夾
end;
//更改傳輸類型
FFTP.TransferType:=ftBinary;
Try
//找到相應的目錄,則更換路徑.
FFTP.ChangeDir(FFTP_STR_FLODER);
//0為上傳
if iTag=0 then
begin
Try
FFTP.Put(sTmpPath+sFile,sFile);
Except
MsgBox('上傳文件失敗!原因如下:'#13#10'1.伺服器沒有開啟寫文件的許可權!'#10#13'2.程序發生異常,請重新上傳!',MB_OK+MB_ICONERROR);
Abort;
End;
FFTP_LWD_BYTES:=FFTP.Size(sFile);
if bDelSFile then //刪除本地源文件
begin
DeleteFile(sTmpPath+sFile);
end;
Result:=True;
FFTP.Disconnect;
end;
//1為下載
if iTag=1 then
begin
//文件已經存在
Try
FFTP_LWD_BYTES:=FFTP.Size(sFile);
if FileExists(sTmpPath+sFile) then
begin
case MsgBox('文件已經存在,要續傳嗎?'#13#10'是--續傳'#10#13'否--覆蓋'#13#10'取消--取消操作',MB_YESNOCANCEL+MB_ICONINFORMATION) of
IDYES: begin
FFTP_LWD_BYTES:=FFTP_LWD_BYTES-FileSizeByName(sTmpPath+sFile);
//參數說明: 源文件,目標文件,是否覆蓋,是否觸發異常(True為不觸發)。
FFTP.Get(sFile,sTmpPath+sFile,False,True);
end;
IDNO: begin
FFTP.Get(sFile,sTmpPath+sFile,True);
end;
IDCANCEL:
begin
FFTP_BOL_ISTRANSFERRING:=False;
end;
end;
end
else //文件不存在
begin
FFTP.Get(sFile,sTmpPath+sFile,True);
end;
Except
MsgBox('上傳文件失敗!原因如下:'#13#10'1.伺服器沒有開啟寫文件的許可權!'#10#13'2.程序發生異常,請重新上傳!',MB_OK+MB_ICONERROR);
Abort;
End;
if bDelSFile then //刪除遠程源文件
begin
FFTP.Delete(sFile);
end;
FFTP.Disconnect;
end;
Except
FFTP.Quit;
Result:=False;
End;
Finally
Dir_List.Free;
End;
end;
procere TTransferThread.UpLoad(dDate: TDateTime);
begin
if Not FFTP_BOL_ISTRANSFERRING then
TransferKernel(0,GetFileFullName(FFTP_STR_DTAG,dDate),FFTP_BOL_DEL);
end;
procere TTransferThread.UpLoad(sFileName: String);
begin
if Not FFTP_BOL_ISTRANSFERRING then
TransferKernel(0,sFileName,FFTP_BOL_DEL);
end;
end.
『伍』 linux下搭建ftp伺服器
linux下搭建ftp伺服器
下面我就為大家整理了一些Linux認證復習備考資料。希望大家可以從中學習答題方法,讓自己的得到進步!最近為了方便目標板與PC機上LINUX之間的通訊,就在LINUX搭建了FTP,工作不難,寫個總結。主要經過以下幾個步驟:
1.檢查是否安裝了vsftpd伺服器
可以用rpm -q vsftpd命令來查看,若顯示"vsftpd-1.1.3-8",則說明系統已經安裝vsftpd伺服器,若沒有則可以在圖形環境下單擊"主菜單→系統設置→添加刪除應用程序"菜單項,在出現的"軟體包管理"對話框里確保選中"FTP伺服器"選項,然後單擊"更新"按鈕,按照屏幕提示插入第3張安裝光碟即可開始安裝。
2.啟動/重新啟動/停止vsftpd服務
從Red Hat Linux 9.0開始,vsftpd默認只採用standalone方式啟動vsftpd服務,方法是在終端命令窗口運行以下命令:
[root@ahpeng root] /etc/rc.d/init.d/vsftpd start
重新啟動vsftpd服務:
[root@ahpeng root] /etc/rc.d/init.d/ vsftpd restart
關閉vsftpd服務:
[root@ahpeng root] /etc/rc.d/init.d/ vsftpd stop
3.vsftpd的配置
在Red Hat Linux 9.0里的vsftpd共有3個配置文件,它們分別是:
vsftpd.ftpusers:位於/etc目錄下。它指定了哪些用戶賬戶不能訪問FTP伺服器,例如root等。
vsftpd.user_list:位於/etc目錄下。該文件里的用戶賬戶在默認情況下也不能訪問
FTP伺服器,僅當vsftpd .conf配置文件里啟用userlist_enable=NO選項時才允許訪問。
vsftpd.conf:位於/etc/vsftpd目錄下。它是一個文本文件,我們可以用Kate、Vi等文本編輯工具對它進行修改,以此來自定義用戶登錄控制、用戶許可權控制、超時設置、伺服器功能選項、伺服器性能選項、伺服器響應消息等FTP伺服器的配置。
(1)用戶登錄控制
anonymous_enable=YES,允許匿名用戶登錄。
no_anon_password=YES,匿名用戶登錄時不需要輸入密碼。
local_enable=YES,允許本地用戶登錄。
deny_email_enable=YES,可以創建一個文件保存某些匿名電子郵件的黑名單,以防止這些人使用Dos攻擊。
banned_email_file=/etc/vsftpd.banned_emails,當啟用deny_email_enable功能時,所需的電子郵件黑名單保存路徑(默認為/etc/vsftpd.banned_emails)。
(2)用戶許可權控制
write_enable=YES,開啟全局上傳許可權。
local_umask=022,本地用戶的上傳文件的umask設為022(系統默認是077,一般都可以改為022)。
anon_upload_enable=YES,允許匿名用戶具有上傳許可權,很明顯,必須啟用write_enable=YES,才
可以使用此項。同時我們還必須建立一個允許ftp用戶可以讀寫的目錄(前面說過,ftp是匿名用戶的映射用戶賬號)。
anon_mkdir_write_enable=YES,允許匿名用戶有創建目錄的權利。
chown_uploads=YES,啟用此項,匿名上傳文件的屬主用戶將改為別的用戶賬戶,注意,這里建議不要指定root賬號為匿名上傳文件的屬主用戶!
chown_username=whoever,當啟用chown_uploads=YES時,所指定的屬主用戶賬號,此處的whoever自然要用合適的用戶賬號來代替。
chroot_list_enable=YES,可以用一個列表限定哪些本地用戶只能在自己目錄下活動,如果chroot_local_user=YES,那麼這個列表裡指定的用戶是不受限制的。
chroot_list_file=/etc/vsftpd.chroot_list,如果chroot_local_user=YES,則指定該列表(chroot_local_user)的保存路徑(默認是/etc/vsftpd.chroot_list)。
nopriv_user=ftpsecure,指定一個安全用戶賬號,讓FTP伺服器用作完全隔離和沒有特權的獨立用戶。這是vsftpd系統推薦選項。
async_abor_enable=YES,強烈建議不要啟用該選項,否則將可能導致出錯!
ascii_upload_enable=YES;ascii_download_enable=YES,默認情況下伺服器會假裝接受ASCⅡ模式請求但實際上是忽略這樣的'請求,啟用上述的兩個選項可以讓伺服器真正實現ASCⅡ模式的傳輸。
(注意:啟用ascii_download_enable選項會讓惡意遠程用戶們在ASCⅡ模式下用"SIZE/big/file"這樣的指令大量消耗FTP伺服器的I/O資源。)
這些ASCⅡ模式的設置選項分成上傳和下載兩個,這樣我們就可以允許ASCⅡ模式的上傳(可以防止上傳腳本等惡意文件而導致崩潰),而不會遭受拒絕服務攻擊的危險。
(3)用戶連接和超時選項
idle_session_timeout=600,可以設定默認的空閑超時時間,用戶超過這段時間不動作將被伺服器踢出。
data_connection_timeout=120,設定默認的數據連接超時時間。
(4)伺服器日誌和歡迎信息
dirmessage_enable=YES,允許為目錄配置顯示信息,顯示每個目錄下面的message_file文件的內容
ftpd_banner=Welcome to blah FTP service,可以自定義FTP用戶登錄到伺服器所看到的歡迎信息。
xferlog_enable=YES,啟用記錄上傳/下載活動日誌功能。
xferlog_file=/var/log/vsftpd.log,可以自定義日誌文件的保存路徑和文件名,默認是/var/log/vsftpd.log.
知道了上面各個選項的含義,你可以根據自己的需要進行配置,達部分的選項一般用不著改動,配置完了以後,確認vsftpd服務已經啟動後,我們可以在Windows主機的S命令窗口裡輸入"ftp Addres"(用實際的FTP伺服器IP地址或者域名代替Addres),注意用戶名、密碼都是ftp(ftp是匿名用戶的映射用戶賬號)。
如果登陸不上,可以試驗在LINUX下本地登陸看看,還有可以在LINUX登陸WINDOWS下的FTP,試驗能否登陸成功,如果可以,那很有可能登陸不上LINUX下的FTP的原因是LINUX的防火牆的原因,可以用rpm -q vsftpd命令來查看,如果防火牆開啟,可以用命令把其關閉,也可以在圖形界面下"主菜單"中的"system settings"中選擇"seurity level",安裝系統的時候如果沒有改動,默認是的seurity level是"Medium",你可以不改動該設置,選中下面"allow incomning"中的"FTP",當然你也可以設置seurity level為"NO firewall",這樣再在Windows下登陸LINUX的FTP,應該可以登陸了。
登陸後具體ftp下的操作就參考有關ftp的命令了,登陸後的路徑為/var/ftp/pub,把你所需要操作的文件可以放在該目錄下,我這里用付ftp主要是在下載linux編譯後的文件到板子上,上傳文件到LINUX上一般不用通過ftp,注意你在ftp下對文件進行一些操作的時候很可能被fail掉,注意根據情況設置文件的操作許可權。
;『陸』 編譯一個shell腳本,ftp到主機 新建目錄 拷貝文件 刪除目錄 退出
首先,陪首腳本並不需要知道本身所在主機的IP,所以,用不到10.10.141.91這個源地址。
再次,ftp命令中不支持直接在伺服器端新建文件,只能先在本地源裂新建後上傳。其實,ftp客戶端軟體,如CuteFTP也都是這么做的,只是你覺察不到。
#!/bin/bash
host="10.10.142.72"
username="xxxx"
#這里寫你的FTP登錄用戶名
password="xxxxxxx"
#這里寫你的FTP登錄密碼
file1="testexam1"
file2="testexam2"
touch
$file1
touch
$file2
(
ftp
-ni
$host
<<EOF
quote
USER
$username
quote
PASS
$password
cd
/home/query
#切換伺服器目錄
binary
put
$file1
put
$file2
lcd
/home/query
#切換本雹亂閉地目錄
get
$file1
delete
$file1
bye
EOF
)
>/dev/null
2>err.log
『柒』 設置linux的ftp需要安裝軟體嗎
不需要軟體,直接使用ftp
#man ftp
用上面的命令看ftp使用手冊
---------
名稱 (NAME)
ftp - Internet 文件傳輸程序 (file transfer program)
概述 (SYNOPSIS)
ftp [-pinegvd] [host] pftp [-inegvd] [host]
說明 (DESCRIPTION)
用戶通過 Ftp 這個程序來使用 Internet 上的標准文件傳輸協議 (File Transfer Protocol). 本程序允許用戶向遠端網站發送文件, 或從遠端網站接收文件.
參數選項可以在命令行啟動ftp時指定, 也可以在ftp命令解釋模式下輸入.
-p 使用被動模悄塵式進行數據傳輸. 如果你本地網路有防火牆, 外部主機不能連接到你這個客戶端, 這個選項就派上用場了. 本選項要求 ftp 伺服器支持 PASV 命令. 如果使用 pftp 從命令行啟動 ftp, 本選項是默認打開的.
-i 進行多個文件傳輸時關掉互動式的確認提示.
-n 一般,在啟動 ftp 時, ftp 會試著進行自動登錄. 本選項可以關掉這個功能. 如果 auto-login 功能被啟用的話, ftp 會在用戶 home 目錄下的 .netrc (參閱 netrc(5)) 文件中查找遠端主機上的用戶帳號. 如果 .netrc 文件中用戶帳號這一項不存在, ftp 會提示用戶輸入遠端主機上的登錄名 (預設為用戶在本地機器上的帳號), 如果需要, 還會提示你輸入密碼和用來登錄的帳號. ??
(譯者注: 使用本選項, 可以實現所謂的 "非互動式登錄". 你可以試試下面這條命令:
echo open ftp_server "\n" user my_name my_password "\n" dir "\n" bye | ftp -n 不能使用 rcp 的時候, 可以用這條啟和禪 ftp 命令來代
替.)
-e 如果被編譯成了 ftp 可執行格式, 本選項會關掉命令編輯和歷史命令功能; 否則什麼也不做. ??
-g 關掉文件名匹配功能.
-v 顯示詳細信息. 本選項使得 ftp 顯示遠端伺服器的所有響應, 並在數據傳輸完成後顯示傳輸數據的統計信息.
-d 打開 debug 模式.
從命令行啟動 ftp 時, 可指定欲與之通訊的遠端主機. 如果指定了, ftp 會立即嘗試與遠端 FTP 伺服器建立連接; 否則, ftp 會進入其命令解釋模式, 等待用戶進一棚租步的指令. ftp 在等待用戶指令時, 會顯示提示符 `ftp>'
-------
補充的問題看不明白
不同的linux有不同的軟體包管理方式
『捌』 請問我在易語言中用了FTP上傳這個功能。那我這個軟體編譯後是不是很容易被破解就是破解到我的虛擬主
只要是在你的軟體裡面進行FTP連接登陸,不管你的軟體怎麼如型加密怎麼保做罩護都沒有用,總是要發送數據連接FTP的,人家一抓包就抓出你渣胡猜登陸的賬號和密碼了。
『玖』 FTP可以編譯,這個編譯和不編譯有什麼區別
回答飢冊余:在eclipse 出錯的時候 或姿帶是你的jvm沒有正確爛滾引入的時候。。解決辦法 右鍵 項目 build path -> config....-> Libraries 把你的jdk remove 再引入就好了