java php 开源 linux wordpress Windows Ubuntu google nginx centos shell 云计算 mysql 编程 Firefox 程序员 Android 微软 apache Python

《嵌入式 Linux應用程序開發標準教程(第2版)》——第2章 Linux基礎命令 2.1 Linux常用命令

第2章 Linux基礎命令

本章目標

Linux是一個高可靠、高性能的系統,而所有這些優越性只有在直接使用Linux命令行時(Shell環境)才能充分地體現出來。本章將幫助讀者學會如下內容。

掌握shell基本概念
熟練使用Linux中用戶管理命令
熟練使用Linux中系統相關命令
熟練使用Linux中文件目錄相關命令
熟練使用Linux中打包壓縮相關命令
熟練使用Linux中文件比較合並相關命令
熟練使用Linux中網絡相關命令
了解Linux的啟動過程
深入了解init進程及其配置文件
能夠獨立完成在Linux中解壓縮軟件
學會添加環境變量
能夠獨立定制Linux中的系統服務
2.1 Linux常用命令

在安裝完Linux再次啟動之後,就可以進入到與Windows類似的圖形化界面了。這個界面就是Linux圖形化界面X窗口系統(簡稱X)的一部分。要註意的是,X窗口系統僅僅是Linux上面的一個軟件(或者也可稱為服務),它不是Linux自身的一部分。雖然現在的X窗口系統已經與Linux整合得相當好了,但畢竟還不能保證絕對的可靠性。另外,X窗口系統是一個相當耗費系統資源的軟件,它會大大地降低Linux的系統性能。因此,若是希望更好地享受Linux所帶來的高效及高穩定性,建議讀者盡可能地使用Linux的命令行界面,也就是shell環境。

當用戶在命令行下工作時,不是直接同操作系統內核交互信息的,而是由命令解釋器接受命令,分析後再傳給相關的程序。shell是一種Linux中的命令行解釋程序,就如同command.com是DOS下的命令解釋程序一樣,為用戶提供使用操作系統的接口。它們之間的關系如圖2.1所示。用戶在提示符下輸入的命令都由shell先解釋然後傳給Linux內核。

  小知識

    shell是命令語言、命令解釋程序及程序設計語言的統稱。它不僅擁有自己內建的shell命令集,同時也能被系統中其他應用程序所調用。

    shell的一個重要特性是它自身就是一個解釋型的程序設計語言,shell程序設計語言支持絕大多數在高級語言中能見到的程序元素,如函數、變量、數組和程序控制結構。shell編程語言簡單易學,任何在提示符中能鍵入的命令都能放到一個可執行的shell程序中。關於shell編程的詳細講解,感興趣的讀者可以參見其他相關書籍。
Linux中運行shell的環境是“系統工具”下的“終端”,讀者可以單擊“終端”以啟動shell環境。這時屏幕上顯示類似“[david@localhost home]$”的信息,其中,david是指系統用戶,localhost是計算機名,而home是指當前所在的目錄。

screenshot

由於Linux中的命令非常多,要全部介紹幾乎是不可能的。因此,本書按照命令的用途進行分類講解,並且對每一類中最常用的命令進行詳細講解,同時列出同一類中的其他命令。由於同一類的命令都有很大的相似性,因此,讀者通過學習本書中所列命令,可以很快地掌握其他命令。

命令格式說明。

格式中帶[]的表明為可選項,其他為必選項。
選項可以多個連帶寫入。
本章後面選項參數列表中加粗的含義是:該選項是非常常用的選項。
2.1.1 用戶系統相關命令

Linux是一個多用戶的操作系統,每個用戶又可以屬於不同的用戶組,下面,首先來熟悉一下Linux中的用戶切換和用戶管理的相關命令。
1.用戶切換(su

(1)作用。

變更為其他使用者的身份,主要用於將普通用戶身份轉變為超級用戶,而且需輸入相應用戶密碼。

(2)格式。

su [選項] [使用者]

其中的使用者為要變更的對應使用者。

(3)常見參數。

主要選項參數如表2.1所示。

screenshot

(4)使用示例。

[david@localhost ~]$ su - root
Password: 
[root@localhost ~]#

示例通過su命令將普通用戶變更為root用戶,並使用選項“-”攜帶root環境變量。

(5)使用說明。

在將普通用戶變更為root用戶時建議使用“-”選項,這樣可以將root的環境變量和工作目錄同時帶入,否則在以後的使用中可能會由於環境變量的原因而出錯。
在轉變為root權限後,提示符變為#。

 小知識

環境變量實際上就是用戶運行環境的參數集合。Linux是一個多用戶的操作系統。而且在每個用戶登錄系統後,都會有一個專有的運行環境。通常每個用戶默認的環境都是相同的,而這個默認環境實際上就是一組環境變量的定義。用戶可以對自己的運行環境進行定制,其方法就是修改相應的系統環境變量。

常見的環境變量如下。

    PATH是系統路徑。
    HOME是系統根目錄。
    HISTSIZE是指保存歷史命令記錄的條數。
    logname是指當前用戶的登錄名。
    hostname是指主機的名稱,若應用程序要用到主機名,通常是從這個環境變量中來取得的。
    SHELL是指當前用戶用的是哪種shell。
    LANG/LANGUGE是和語言相關的環境變量,使用多種語言的用戶可以修改此環境變量。
    mail是指當前用戶的郵件存放目錄。 設置環境變量方法如下。
    通過echo顯示字符串(指定環境變量)。
    通過export設置新的環境變量。
    通過env顯示所有環境變量。
    通過set命令顯示所有本地定義的shell變量。
    通過unset命令來清除環境變量。

讀者可以試著用“env”命令查看“su - root”(或“su –”)和“su root”的區別。
2.用戶管理(useraddpasswd

Linux中常見用戶管理命令如表2.2所示,本書僅以useradd和passwd為例進行詳細講解,其他命令類似,請讀者自行學習使用。

screenshot

(1)作用。

① useradd:添加用戶賬號。

② passwd:更改對應用戶的賬號密碼。

(2)格式。

① useradd:useradd [選項] 用戶名。

② passwd:passwd [選項] [用戶名]。

其中的用戶名為修改賬號密碼的用戶,若不帶用戶名,默認為更改當前使用者的密碼。

(3)常用參數。

① useradd主要選項參數如表2.3所示。

screenshot

② passwd:一般很少使用選項參數。

(4)使用實例。

[root@localhost ~]# useradd david
[root@localhost ~]# passwd david
New password: (輸入密碼)
Retype new password: (再輸入一次密碼,以確認輸入的正確性)
passwd: all authentication tokens updated successfully
[root@localhost ~]# su – david
[david@localhost ~]$
[david@localhost ~]$ pwd(查看當前目錄)
/home/david (該用戶的工作目錄)
實例中先添加了用戶名為david的用戶,接著又為該用戶設置了賬號密碼。從su的命令可以看出,該用戶添加成功,其工作目錄為“/home/david”。

(5)使用說明。

在添加用戶時,這兩個命令是一起使用的,其中,useradd必須用root的權限。而且useradd指令所建立的賬號,實際上是保存在“/etc/passwd”文本文件中,文件中每一行包含一個賬號信息。
在默認情況下,useradd所做的初始化操作包括在“/home”目錄下為對應賬號建立一個同名的主目錄,並且還為該用戶單獨建立一個與用戶名同名的組。
adduser只是useradd的符號鏈接(關於符號鏈接的概念在本節後面會有介紹),兩者是相同的。
passwd還可用於普通用戶修改賬號密碼,Linux並不采用類似Windows的密碼回顯(顯示為*號),所以輸入的這些字符用戶是看不見的。密碼最好包括字母、數字和特殊符號,並且設成6位以上。
3.系統管理命令(pskill

Linux中常見的系統管理命令如表2.4所示,本書以ps和kill為例進行講解。

screenshot

(1)作用。

① ps:顯示當前系統中由該用戶運行的進程列表。

② kill:輸出特定的信號給指定PID(進程號)的進程,並根據該信號完成指定的行為。其中可能的信號有進程掛起、進程等待、進程終止等。

(2)格式。

① ps:ps [選項]。

② kill:kill [選項] 進程號(PID)。

kill命令中的進程號為信號輸出的指定進程的進程號,當選項是默認時為輸出終止信號給該進程。

(3)常見參數。

① ps主要選項參數如表2.5所示。

screenshot

② kill主要选项参数如表2.6所示。

screenshot

(4)使用实例。

[root@localhost root]# ps –ef
UID    PID PPID C STIME TTY     time CMD
root    1   0 0 2005 ?    00:00:05 init
root    2   1 0 2005 ?    00:00:00 [keventd]
root    3   0 0 2005 ?    00:00:00 [ksoftirqd_CPU0]
root    4   0 0 2005 ?    00:00:00 [ksoftirqd_CPU1]
root   7421   1 0 2005 ?    00:00:00 /usr/local/bin/ntpd -c /etc/ntp.
root   21787 21739 0 17:16 pts/1   00:00:00 grep ntp
[root@localhost root]# kill -9 7421 (杀死进程)
[root@localhost root]# ps -ef|grep ntp
root   21789 21739 0 17:16 pts/1  00:00:00 grep ntp

該實例中首先查看所有進程,並終止進程號為7421的ntp進程,之後再次查看時已經沒有該進程號的進程。

(5)使用說明。

ps在使用中通常可以與其他一些命令結合起來使用,主要作用是提高效率。
ps選項中的參數w可以寫多次,通常最多寫3次,它的含義為加寬3次,這足以顯示很長的命令行了。例如:ps –auxwww。

 小知識

管道是Linux中信息通信的重要方式。它是把一個程序的輸出直接連接到另一個程序的輸入,而不經過任何中間文件。管道線是指連接兩個或更多程序管道的通路。在shell中字符”|”表示管道線。如前例子中的ps –ef|grep ntp所示,ps –ef的結果直接輸入到grep ntp的程序中(關於grep命令在後面會有詳細的介紹)。grep、prsortwc都可以在上述管道線上工作。讀者可以靈活地運用管道機制提高工作效率。
4.磁盤相關命令(fdisk

Linux中與磁盤相關的命令如表2.7所示,本書僅以fdisk為例進行講解。

screenshot

(1)作用。

fdisk可以查看硬盤分區情況,並可對硬盤進行分區管理,這裏主要介紹如何查看硬盤分區情況,另外,fdisk也是一個非常好的硬盤分區工具,感興趣的讀者可以另外查找資料學習如何使用fdisk進行硬盤分區。

(2)格式。

fdisk [-l]

(3)使用實例。

[root@localhost ~]# fdisk -l
Disk /dev/hda: 40.0 GB, 40007761920 bytes
240 heads, 63 sectors/track, 5168 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes
  Device Boot   Start     End   Blocks  Id System
/dev/hda1  *      1     1084   8195008+  c W95 FAT32 (LBA)
/dev/hda2       1085     5167  30867480  f W95 Ext'd (LBA)
/dev/hda5       1085     2439  10243768+  b W95 FAT32
/dev/hda6       2440     4064  12284968+  b W95 FAT32
/dev/hda7       4065     5096   7799526  83 Linux
/dev/hda8       5096     5165   522081  82 Linux swap
Disk /dev/sda: 999 MB, 999816704 bytes
4 heads, 8 sectors/track, 61023 cylinders
Units = cylinders of 32 * 512 = 16384 bytes
Disk identifier: 0x00000000

Device Boot   Start     End   Blocks  Id System
/dev/sda1  *      1    61024   976379+  b W95 FAT32

可以看出,使用“fdisk –l”列出了文件系統的分區情況。

(4)使用說明。

使用fdisk必須擁有root權限。
IDE硬盤對應的設備名稱分別為hda、hdb、hdc和hdd,SCSI硬盤對應的設備名稱則為sda、sdb…。此外,hda1代表hda的第一個硬盤分區,hda2代表hda的第二個分區,依此類推。
通過查看/var/log/messages文件,可以找到Linux系統已辨認出來的設備代號。
5.文件系統掛載命令(mount

(1)作用。

掛載文件系統,它的使用權限是超級用戶或/etc/fstab中允許的使用者。正如1.2.1節中所述,掛載是指在分區和目錄之間建立映射關系的過程,而掛載點是指掛載在文件樹中的位置。使用mount命令可以把文件系統掛載到相應的目錄下,並且由於Linux中把設備都當成文件一樣使用,因此,mount命令也可以掛載不同的設備。

通常,在Linux下“/mnt”目錄是專門用於掛載不同的文件系統的,它可以在該目錄下新建不同的子目錄來掛載不同的設備文件系統。

(2)格式。

mount [選項] [類型] 設備文件名掛載點目錄

其中的類型是指設備文件的類型。

(3)常見參數。

mount常見參數如表2.8所示。

screenshot

(4)使用實例。

使用mount命令主要通過以下幾個步驟。

① 確認是否為Linux可以識別的文件系統,Linux可識別的文件系統只要是以下幾種。

Windows 95/98常用的FAT32文件系統:vfat。
Windows NT/2000的文件系統:ntfs。
OS/2用的文件系統:hpfs。
Linux用的文件系統:ext2、ext3、nfs。
cd-ROM光盤用的文件系統:iso9660。
② 確定設備的名稱,可通過使用命令“fdisk -l”查看。

③ 查找掛載點。

必須確定掛載點已經存在,也就是在“/mnt”下的相應子目錄已經存在,一般建議在“/mnt”下新建幾個如“/mnt/windows”,“/mnt/usb”的子目錄,現在有些新版本的Linux(如FedoraUbuntu、紅旗Linux、中軟Linux、MandrakeLinux)都可自動掛載文件系統,Red Hat Linux僅可自動掛載光驅。

④ 掛載文件系統如下所示。

[root@locaohost ~]# mkdir -p /mnt/win/c
[root@locaohost ~]# mount -t vfat /dev/hda1 /mnt/win/c
[root@localhost ~]# cd /mnt/win/c
24.s03e01.pdtv.xvid-sfm.rmvb Documents and Settings Program Files
24.s03e02.pdtv.xvid-sfm.rmvb Downloads           Recycled

C盤是原先筆者Windows系統的啟動盤。可見,在掛載了C盤之後,可直接訪問Windows下的C盤的內容。

⑤ 在使用完該設備文件後可使用命令umount將其卸載。

[root@localhost ~]# umount /mnt/win/c
[root@localhost ~]# cd /mnt/win/c
[root@localhost ~]# ls /mnt/win/c
可見,此時目錄“/mnt/win/c”下為空。Windows下的C盤已被成功卸載。

 小知識

    在Linux下如何使用U盤呢?

一般U盤為SCSI格式的硬盤,其格式為vfat格式,其設備號可通過“fdisk –l”進行查看,假若設備名為“/dev/sda1”,則可用如下命令將其掛載:

mount -t vfat /dev/sda1 /mnt/usb

    若想設置在開機時自動掛載,在文件“/etc/fstab”中加入相應的設置行即可。
2.1.2 文件相關命令

Linux中有關文件的操作非常重要,也非常常用,本節將對Linux系統的文件操作命令進行詳細講解。
1.cd

(1)作用。

改變當前工作目錄。

(2)格式。

cd [路徑]

其中的路徑為要改變的工作目錄,可為相對路徑或絕對路徑。

(3)使用實例。

[root@localhost ~]# cd /home/david/
[root@localhost david]# pwd
[root@localhost david]# /home/david/
該實例中變更工作目錄為“/home/david/”,在後面的“pwd”(顯示當前目錄)的結果中可以看出。

(4)使用說明。

該命令將當前目錄改變至指定路徑的目錄。若沒有指定路徑,則回到用戶的主目錄(例如:“/home/david”為用戶david的主目錄)。為了改變到指定目錄,用戶必須擁有對指定目錄的執行和讀權限。
該命令可以使用通配符。
使用“cd –”可以回到前次工作目錄。
“./”代表當前目錄,“../”代表上級目錄。
2.ls

(1)作用。

列出目錄和文件的信息。

(2)格式。

ls [選項] [文件]

其中文件選項為指定查看指定文件的相關內容,若未指定文件,默認查看當前目錄下的所有文件。

(3)常見參數。

ls主要選項參數見表2.9所示。

screenshot

(4)使用實例。

[david@localhost test]$ ls -l
total 220
drwxr-xr-x  2 root   root     4096 Mar 31 2005 bin
drwxr-xr-x  3 root   root     4096 Apr 3 2005 boot
-rw-r--r--  1 root   root      0 Apr 24 2002 test.run

該實例查看當前目錄下的所有文件,並通過選項“-l”顯示出詳細信息。

顯示格式說明如下。

文件類型與權限 鏈接數 文件屬主 文件屬組 文件大小 修改的時間 名字

(5)使用說明。

在ls的常見參數中,-l(長文件名顯示格式)的選項是最為常見的。可以詳細顯示出各種信息。
若想顯示出所有“.”開頭的隱藏文件,可以使用-a,這在嵌入式開發中很常用。

 註意

Linux中的可執行文件不是與Windows一樣通過文件擴展名來標識的,而是通過設置文件相應的可執行屬性來實現的。
3.mkdir

(1)作用。

創建一個目錄。

(2)格式。

mkdir [選項] 路徑

(3)常見參數。

mkdir主要選項參數如表2.10所示。

screenshot

(4)使用实例。

[david@localhost ~]$ mkdir -p ./hello/my
[david@localhost ~]$ cd hello/my
[david@localhost my]$ pwd(查看当前目录命令)
/home/david/hello/my

该实例使用选项“-p”一次创建了./hello/my多级目录。

[david@localhost my]$ mkdir -m 777 ./why
[david@localhost my]$ ls -l
total 4
drwxrwxrwx  2 root   root     4096 Jan 14 09:24 why

該實例使用改選項“-m”創建了相應權限的目錄。對於“777”的權限在本節後面會有詳細的說明。

(5)使用說明。

該命令要求創建目錄的用戶在創建路徑的上級目錄中具有寫權限,並且路徑名不能是當前目錄中已有的目錄或文件名稱。
4.cat

(1)作用。

連接並顯示指定的一個或多個文件的有關信息。

(2)格式。

cat[選項]文件1文件2…

其中的文件1、文件2為要顯示的多個文件。

(3)常見參數。

cat命令的常見參數如表2.11所示。

screenshot

(4)使用实例。

[david@localhost ~]$ cat -n hello1.c hello2.c
   1 #include <stdio.h>
   2 void main()
   3 {
   4     printf("Hello!This is my home!\n");
   5 }
   6 #include <stdio.h>
   7 void main()
   8 {
   9     printf("Hello!This is your home!\n");
  10 }

在該實例中,指定對hello1.c和hello2.c進行輸出,並指定行號。
5.cpmvrm

(1)作用。

① cp:將給出的文件或目錄復制到另一文件或目錄中。

② mv:為文件或目錄改名或將文件由一個目錄移入另一個目錄中。

③ rm:刪除一個目錄中的一個或多個文件或目錄。

(2)格式。

① cp:cp [選項] 源文件或目錄 目標文件或目錄。

② mv:mv [選項] 源文件或目錄 目標文件或目錄。

③ rm:rm [選項] 文件或目錄。

(3)常見參數。

① cp主要選項參數如表2.12所示。

screenshot

② mv主要选项参数如表2.13所示。

screenshot

③ rm主要选项参数如表2.14所示。

screenshot

(4)使用实例。

① cp

[root@www hello]# cp -a ./my/why/ ./ 
[root@www hello]# ls
my why

该实例使用-a选项将“/my/why”目录下的所有文件复制到当前目录下,而此时在原先目录下还有原有的文件。

② mv

[root@www hello]# mv -i ./my/why/ ./
[root@www hello]# ls
my why

该实例中把“/my/why”目录下的所有文件移至当前目录,则原目录下文件被自动删除。

③ rm

[root@www hello]# rm –r -i ./why
rm: descend into directory './why'? y
rm: remove './why/my.c'? y
rm: remove directory './why'? y

該實例使用“-r”選項刪除“./why”目錄下所有內容,系統會進行確認是否刪除。

(5)使用說明。

① cp:該命令把指定的源文件復制到目標文件,或把多個源文件復制到目標目錄中。

② mv

該命令根據命令中第二個參數類型的不同(是目標文件還是目標目錄)來判斷是重命名還是移動文件,當第二個參數類型是文件時,mv命令完成文件重命名,此時,它將所給的源文件或目錄重命名為給定的目標文件名;
當第二個參數是已存在的目錄名稱時,mv命令將各參數指定的源文件均移至目標目錄中;
在跨文件系統移動文件時,mv先復制,再將原有文件刪除,而連至該文件的鏈接也將丟失。
③ rm

如果沒有使用- r選項,則rm不會刪除目錄;
使用該命令時一旦文件被刪除,它是不能被恢復的,所以最好使用-i參數。
6.chownchgrp

(1)作用。

① chown:修改文件所有者和組別。

② chgrp:改變文件的組所有權。

(2)格式。

① chown:chown [選項]...文件所有者[所有者組名] 文件

其中的文件所有者為修改後的文件所有者。

② chgrp:chgrp [選項]... 文件所有組 文件

其中的文件所有組為改變後的文件組擁有者。

(3)常見參數。

chown和chgrp的常見參數意義相同,其主要選項參數如表2.15所示。

screenshot

(4)使用實例。

在筆者的系統中一個文件的所有者原先是這樣的。

[root@localhost test]#$ ls -l
-rwxr-xr-x  15 apectel david     4096 6月 4 200X uClinux-dist.tar
可以看出,這是一個文件,文件擁有者是apectel,具有可讀寫和執行的權限,它所屬的用戶組是david,具有可讀和執行的權限,但沒有可寫的權限,同樣,系統其他用戶對其也只有可讀和執行的權限。

首先使用chown將文件所有者改為root。

[root@localhost test]# chown root uClinux-dist.tar
[root@localhost test]# ls –l
-rwxr-xr-x  15 root   david     4096 6月 4 200X uClinux-dist.tar
可以看出,此時,該文件擁有者變為了root,它所屬文件用戶組不變。

接著使用chgrp將文件用戶組變為root。

[root@localhost test]# chgrp root uClinux-dist.tar
[root@localhost test]# ls –l
-rwxr-xr-x  15 root   root     4096 6月 4 200X uClinux-dist.tar
(5)使用說明。

使用chown和chgrp必須擁有root權限。

 小知識

在進行有關文件的操作時,若想避免輸入冗長的文件,在文件名沒有重復的情況下可以使用輸入文件前幾個字母+<Tab>鍵的方式,即:cd /uC<tab>會顯示cd /uClinux-list。
7.chmod

(1)作用。

改變文件的訪問權限。

(2)格式。

chmod可使用符號標記進行更改和八進制數指定更改兩種方式,因此它的格式也有兩種不同的形式。

① 符號標記:chmod [選項]…符號權限[符號權限]…文件

其中的符號權限可以指定為多個,也就是說,可以指定多個用戶級別的權限,但它們中間要用逗號分開表示,若沒有顯式指出則表示不作更改。

② 八進制數:chmod [選項] …八進制權限 文件…

其中的八進制權限是指要更改後的文件權限。

(3)選項參數。

chmod主要選項參數如表2.16所示。

screenshot

(4)使用實例。

chmod涉及文件的訪問權限,在此對相關的概念進行簡單的回顧。

在1.3.1節中已經提到,文件的訪問權限可表示成:-rwx rwx rwx**。在此設有3種不同的訪問權限:讀(r)、寫(w)和運行(x)。3個不同的用戶級別:文件擁有者(u)、所屬的用戶組(g)和系統裏的其他用戶(o)。在此,可增加一個用戶級別a(all)來表示所有這3個不同的用戶級別。

① 第一種符號連接方式的chmod命令中,用加號“+”代表增加權限,用減號“−”代表刪除權限,等於號“=”代表設置權限。

例如,原先筆者系統中有文件uClinux20031103.tgz,其權限如下所示。

[root@localhost test]# ls –l
-rw-r--r--  1 root   root   79708616 Mar 24 2005 uClinux20031103.tgz
[root@localhost test]# chmod a+rx,u+w uClinux20031103.tgz
[root@localhost test]# ls –l
-rwxr-xr-x  1 root   root   79708616 Mar 24 2005 uClinux20031103.tgz
可見,在執行了chmod之後,文件擁有者除擁有所有用戶都有的可讀和執行的權限外,還有可寫的權限。

② 對於第二種八進制數指定的方式,將文件權限字符代表的有效位設為“1”,即“rw-”、“rw-”和“r--”的八進制表示為“110”、“110”、“100”,把這個二進制串轉換成對應的八進制數就是6、6、4,也就是說該文件的權限為664(三位八進制數)。這樣對於轉化後八進制數、二進制及對應權限的關系如表2.17所示。

screenshot

同上例,原先笔者系统中有文件genromfs-0.5.1.tar.gz,其权限如下所示。

[root@localhost test]# ls –l
-rw-rw-r--  1 david   david    20543 Dec 29 2004 genromfs-0.5.1.tar.gz
[root@localhost test]# chmod 765 genromfs-0.5.1.tar.gz
[root@localhost test]# ls –l
-rwxrw-r-x  1 david   david    20543 Dec 29 2004 genromfs-0.5.1.tar.gz

可見,在執行了chmod 765之後,該文件的擁有者權限、文件組權限和其他用戶權限都恰當地對應了。

(5)使用說明。

使用chmod必須具有root權限。

想一想

chmod o+x uClinux20031103.tgz是什麽意思?它所對應的八進制數指定更改應如何表示?
8.grep

(1)作用。

在指定文件中搜索特定的內容,並將含有這些內容的行標準輸出。

(2)格式。

grep [選項] 格式 [文件及路徑]

其中的格式是指要搜索的內容格式,若默認“文件及路徑”則默認表示在當前目錄下搜索。

(3)常見參數。

grep主要選項參數如表2.18所示。

screenshot

(4)使用实例。

[root@localhost test]# grep "hello" / -r
Binary file ./iscit2005/备份/iscit2004.sql matches
./ARM_TOOLS/uClinux-Samsung/linux-2.4.x/Documentation/s390/Debugging390.txt:hello world$2 = 0

在本例中,“hello”是要搜索的內容,“/ -r”是指定文件,表示搜索根目錄下的所有文件。

(5)使用說明。

在默認情況下,“grep”只搜索當前目錄。如果此目錄下有許多子目錄,“grep”會以如下形式列出:“grep:sound:Is a directory”。這會使“grep”的輸出難以閱讀。但有以下兩種解決的方法。
① 明確要求搜索子目錄:grep –r(正如上例中所示);

② 忽略子目錄:grep -d skip。

當預料到有許多輸出時,可以通過管道將其轉到“less”(分頁器)上閱讀:如grep "h" ./ -r |less分頁閱讀。
grep特殊用法。 grep pattern1|pattern2 files:顯示匹配pattern1或pattern2的行; grep pattern1 files|grep pattern2:顯示既匹配pattern1又匹配pattern2的行;

 小知識

在文件命令中經常會使用pattern正則表達式,它是可以描述一類字符串的模式(Pattern),如果一個字符串可以用某個正則表達式來描述,就稱這個字符和該正則表達式匹配。這和DOS中用戶可以使用通配符“*”代表任意字符類似。在Linux系統上,正則表達式通常被用來查找文本的模式,以及對文本執行“搜索-替換”操作等。

正則表達式的主要參數如下。

    \:忽略正則表達式中特殊字符的原有含義;
    ^:匹配正則表達式的開始行;
    $:匹配正則表達式的結束行;
    <:從匹配正則表達式的行開始;
    >:到匹配正則表達式的行結束;
    [ ]:單個字符,如[A]即A符合要求;
    [-]:範圍,如[A-Z],即A、B、C一直到Z都符合要求;
    。:所有的單個字符;
    *:所有字符,長度可以為0。
9.find

(1)作用。

在指定目錄中搜索文件,它的使用權限是所有用戶。

(2)格式。

find 路徑[描述]

其中的路徑為文件搜索路徑,系統開始沿著此目錄樹向下查找文件。它是一個路徑列表,相互用空格分離。若默認路徑,那麽默認為當前目錄。

其中的描述是匹配表達式,是find命令接受的表達式。

(3)常見參數。

[選項]主要參數如表2.19所示。

screenshot

[描述]主要参数如表2.20所示。

screenshot

(4)使用实例。

[root@localhost test]# find ./ -name hello*.c
./hello1.c
./iscit2005/hello2.c

在該實例中使用了-name的選項支持通配符。

(5)使用說明。

若使用目錄路徑為“/”,通常需要查找較多的時間,可以指定更為確切的路徑以減少查找時間。
find命令可以使用混合查找的方法,例如,想在/etc目錄中查找大於500000字節,並且在24小時內修改的某個文件,則可以使用-and(與)把兩個查找參數鏈接起來組合成一個混合的查找方式,如“find /etc -size +500000c -and -mtime +1”。
10.locate

(1)作用。

用於查找文件。其方法是先建立一個包括系統內所有文件名稱及路徑的數據庫,之後當尋找時就只需查詢這個數據庫,而不必實際深入檔案系統之中了。因此其速度比find快很多。

(2)格式。

locate [選項]

(3)locate主要選項參數如表2.21所示。

screenshot

(4)使用实例。

[root@localhost test]# locate issue -U ./
[root@localhost test]# updatedb
[root@localhost test]# locate -r issue*
./ARM_TOOLS/uClinux-Samsung/lib/libpam/doc/modules/pam_issue.sgml
./ARM_TOOLS/uClinux-Samsung/lib/libpam/modules/pam_issue
./ARM_TOOLS/uClinux-Samsung/lib/libpam/modules/pam_issue/Makefile
./ARM_TOOLS/uClinux-Samsung/lib/libpam/modules/pam_issue/pam_issue.c

實例中首先在當前目錄下建立了一個數據庫,並且在更新了數據庫之後進行正則匹配查找。通過運行可以發現locate的運行速度非常快。

(5)使用說明。

locate命令所查詢的數據庫由updatedb程序來更新,而updatedb是由cron daemon周期性建立的,但若所找到的檔案是最近才建立或剛改名的,可能會找不到,因為updatedb默認每天運行一次,用戶可以由修改crontab配置(etc/crontab)來更新周期值。
11.ln

(1)作用。

為某一個文件在另外一個位置建立一個符號鏈接。當需要在不同的目錄用到相同的文件時,Linux允許用戶不用在每一個需要的目錄下都存放一個相同的文件,而只需將其他目錄下的文件用ln命令鏈接即可,這樣就不必重復地占用磁盤空間。

(2)格式。

ln[選項] 目標 目錄

(3)常見參數。

-s建立符號鏈接(這也是通常惟一使用的參數)。
(4)使用實例。

[root@localhost test]# ln -s ../genromfs-0.5.1.tar.gz ./hello
[root@localhost test]# ls -l
total 77948
lrwxrwxrwx  1 root  root  24 Jan 14 00:25 hello -> ../genromfs-0.5.1.tar.gz

該實例建立了當前目錄的hello文件與上級目錄之間的符號鏈接,可以看見,在hello的ls –l中的第一位為“l”,表示符號鏈接,同時還顯示了鏈接的源文件。

(5)使用說明。

ln命令會保持每一處鏈接文件的同步性,也就是說,不論改動了哪一處,其他的文件都會發生相同的變化。
ln的鏈接分軟鏈接和硬鏈接兩種。
軟鏈接就是上面所說的ln -s ,它只會在用戶選定的位置上生成一個文件的鏡像,不會重復占用磁盤空間,平時使用較多的都是軟鏈接。

硬鏈接是不帶參數的ln ,它會在用戶選定的位置上生成一個和源文件大小相同的文件,無論是軟鏈接還是硬鏈接,文件都保持同步變化。

2.1.3 壓縮打包相關命令

Linux中打包壓縮的相關命令如表2.22所示,本書以gzip和tar為例進行講解。

screenshot

1.gzip

(1)作用。

對文件進行壓縮和解壓縮,而且gzip根據文件類型可自動識別壓縮或解壓縮。

(2)格式。

gzip [選項] 壓縮(解壓縮)的文件名。

(3)常見參數。

gzip主要選項參數如表2.23所示。

screenshot

(4)使用实例。

[root@localhost test]# gzip portmap-4.0-54.i386.rpm
[root@localhost test]# ls
portmap-4.0-54.i386.rpm.gz
[root@localhost test]# gzip -l portmap-4.0-54.i386.rpm
compressed  uncompressed ratio uncompressed_name
   21437       25751 16.9% portmap-4.0-54.i386.rpm

該實例將目錄下的“hello.c”文件進行壓縮,選項“-l”列出了壓縮比。

(5)使用說明。

使用gzip壓縮只能壓縮單個文件,而不能壓縮目錄,其選項“-d”是將該目錄下的所有文件逐個進行壓縮,而不是壓縮成一個文件。
2.tar

(1)作用。

對文件目錄進行打包或解包。

在此需要對打包和壓縮這兩個概念進行區分。打包是指將一些文件或目錄變成一個總的文件,而壓縮則是將一個大的文件通過一些壓縮算法變成一個小文件。為什麽要區分這兩個概念呢?這是由於在Linux中的很多壓縮程序(如前面介紹的gzip)只能針對一個文件進行壓縮,這樣當想要壓縮較多文件時,就要借助它的工具將這些堆文件先打成一個包,然後再用原來的壓縮程序進行壓縮。

(2)格式。

tar [選項] [打包後文件名]文件目錄列表。

tar可自動根據文件名識別打包或解包動作,其中打包後文件名為用戶自定義的打包後文件名稱,文件目錄列表可以是要進行打包備份的文件目錄列表,也可以是進行解包的文件目錄列表。

(3)主要參數。

tar主要選項參數如表2.24所示。

screenshot

(4)使用实例。

[root@localhost home]# tar -cvf david.tar david
./david/
./david/.bash_logout
./david/.bash_profile
./david/.bashrc
./david/.bash_history
./david/my/
./david/my/1.c.gz
./david/my/my.c.gz
./david/my/hello.c.gz
./david/my/why.c.gz
[root@localhost home]# ls -l david.tar
-rw-r--r--  1 root   root    10240 Jan 14 15:01 david.tar

该实例将“david”目录下的文件加以打包,其中选项“-v”在屏幕上输出了打包的具体过程。

[david@localhost david]# tar -zxvf linux-2.6.11.tar.gz
linux-2.6.11/
linux-2.6.11/drivers/
linux-2.6.11/drivers/video/
linux-2.6.11/drivers/video/aty/
…

該實例用選項“-z”調用gzip,與“-x”聯用時完成解壓縮。

(5)使用說明。

tar命令除了用於常規的打包之外,使用更為頻繁的是用選項“-z”或“-j”調用gzip或bzip2(Linux中另一種解壓工具)完成對各種不同文件的解壓。

表2.25對Linux中常見類型的文件解壓命令做一個總結。

screenshot

2.1.4 文件比較合並相關命令

1.diff

(1)作用。

比較兩個不同的文件或不同目錄下的兩個同名文件功能,並生成補丁文件。

(2)格式。

diff[選項] 文件1 文件2

diff比較文件1和文件2的不同之處,並按照選項所指定的格式加以輸出。diff的格式分為命令格式和上下文格式,其中上下文格式又包括了舊版上下文格式和新版上下文格式,命令格式分為標準命令格式、簡單命令格式及混合命令格式,它們之間的區別會在使用實例中進行詳細講解。當選項默認時,diff默認使用混合命令格式。

(3)主要參數。

diff主要選項參數如表2.26所示。

screenshot

(4)使用实例。

以下有两个文件hello1.c和hello2.c。

/* hello1.c */
#include <stdio.h>
void main()
{
      printf("Hello!This is my home!\n");
}
/* hello2.c */
#include <stdio.h>
void main()
{
      printf("Hello!This is your home!\n");
}

以下实例主要讲解了各种不同格式的比较和补丁文件的创建方法。

① 主要格式比较。

首先使用旧版上下文格式进行比较。

[root@localhost david]# diff -c hello1.c hello2.c
*** hello1.c  Sat Jan 14 16:24:51 2006
--- hello2.c  Sat Jan 14 16:54:41 2006
***************
*** 1,5 ****
 #include <stdio.h>
 void main()
 {
!    printf("Hello!This is my home!\n");
 }
--- 1,5 ----
 #include <stdio.h>
 void main()
 {
!    printf("Hello!This is your home!\n");
 }

可以看出,用旧版上下文格式进行输出时,在显示每个有差别行的同时还显示该行的上下3行,区别的地方用“!”加以标出,由于示例程序较短,上下3行已经包含了全部代码。

接着使用新版的上下文格式进行比较。

[root@localhost david]# diff -u hello1.c hello2.c 
--- hello1.c  Sat Jan 14 16:24:51 2006
+++ hello2.c  Sat Jan 14 16:54:41 2006
@@ -1,5 +1,5 @@
 #include <stdio.h>
 void main()
 {
-    printf("Hello!This is my home!\n");
+    printf("Hello!This is your home!\n");
 }

可以看出,在新版上下文格式输出时,仅把两个文件的不同之处分别列出,而相同之处没有重复列出,这样大大方便了用户的阅读。

接下来使用命令格式进行比较。

[root@localhost david]# diff -e hello1.c hello2.c 
4c
     printf("Hello!This is your home!\n");

可以看出,命令符格式输出时仅输出了不同的行,其中命令符“4c”中的数字表示行编号,字母的含义为:a表示添加,b表示删除,c表示更改。因此,-e选项的命令符表示:若要把hello1.c变为hello2.c,就需要把hello1.c的第4行改为显示出的“printf(“Hello!This is your home!n”);”。

选项“-f”和选项“-e”显示的内容基本相同,就是数字和字母的顺序相交换了,从以下的输出结果可以看出。

[root@localhost david]# diff -f hello1.c hello2.c 
c4
     printf("Hello!This is your home!\n");

在diff选项默认的情况下,输出结果如下所示。

[root@localhost david]# diff hello1.c hello2.c  
4c4
<    printf("Hello!This is my home!\n");
---
>    printf("Hello!This is your home!\n");

可以看出,diff默认情况下的输出格式充分显示了如何将hello1.c转化为hello2.c,即通过“4c4”实现。

② 创建补丁文件(也就是差异文件)是diff的功能之一,不同的选项格式可以生成与之相对应的补丁文件,如下面的例子所示。

[root@localhost david]# diff hello1.c hello2.c >hello.patch
[root@localhost david]# vi hello.patch 
4c4
<    printf("Hello!This is my home!\n");
---
>    printf("Hello!This is your home!\n");

可以看出,使用默认选项创建补丁文件的内容和前面使用默认选项的输出内容是一样的。

 小知识

上例中所使用的“>”是輸出重定向。通常在Linux上執行一個shell命令行時,會自動打開3個標準文件:標準輸入文件(stdin),即通常對應終端的鍵盤;標準輸出文件(stdout)和標準錯誤輸出文件(stderr),前兩個文件都對應終端的屏幕。進程將從標準輸入文件中得到輸入數據,並且將正常輸出數據輸出到標準輸出文件,而將錯誤信息送到標準錯誤文件中。這就是通常使用的標準輸入/輸出方式。

直接使用標準輸入/輸出文件存在以下問題:首先,用戶輸入的數據只能使用一次。當下次希望再次使用這些數據時就不得不重新輸入。同樣,用戶對輸出信息不能做更多的處理,只能等待程序的結束。

為了解決上述問題,Linux系統為輸入、輸出的信息傳送引入了兩種方式:輸入/輸出重定向機制和管道(在1.3.1的小知識中已有介紹)。其中,輸入重定向是指把命令(或可執行程序)的標準輸入重定向到指定的文件中。也就是說,輸入可以不來自鍵盤,而來自一個指定的文件。同樣,輸出重定向是指把命令(或可執行程序)的標準輸出或標準錯誤輸出重新定向到指定文件中。這樣,該命令的輸出就可以不顯示在屏幕上,而是寫入到指定文件中。就如上述例子中所用到的把“diff hello1.c hello2.c”的結果重定向到hello.patch文件中。這就大大增加了輸入/輸出的靈活性。
2.patch

(1)作用。

命令跟diff配合使用,把生成的補丁文件應用到現有代碼上。

(2)格式。

patch [選項] [待patch的文件[patch文件]]。

常用的格式為:patch -pnum [patch文件],其中的-pnum是選項參數,在後面會詳細介紹。

(3)常見參數。

patch主要選項參數如表2.27所示。

screenshot

以下对-punm选项进行说明。

首先查看以下示例(对分别位于xc.orig/config/cf/Makefile和xc.bsd/config/cf/Makefile的文件使用patch命令)。

diff -ruNa xc.orig/config/cf/Makefile xc.bsd/config/cf/Makefile

以下是patch文件的头标记。

--- xc.orig/config/cf/Imake.cf Fri Jul 30 12:45:47 1999
+++ xc.new/config/cf/Imake.cf Fri Jan 21 13:48:44 2000

這個patch如果直接應用,那麽它會去找“xc.orig/config/cf”目錄下的Makefile文件,假如用戶源碼樹的根目錄是默認的xc而不是xc.orig,則除了可以把xc.orig移到xc處之外,還有什麽簡單的方法應用此patch嗎?NUM就是為此而設的:patch會把目標路徑名剝去NUM個“/”,也就是說,在此例中,-p1的結果是config/cf/Makefile,-p2的結果是cf/Makefile。因此,在此例中就可以用命令cd xc;patch _p1 < /pathname/xxx.patch完成操作。

(4)使用實例。

[root@localhost david]# diff hello1.c hello2.c >hello1.patch
[root@localhost david]# patch ./hello1.c < hello1.patch 
patching file ./hello1.c
[root@localhost david]# vi hello1.c
#include <stdio.h>
void main()
{
    printf("Hello!This is your home!\n");
}

在该实例中,由于patch文件和源文件在同一目录下,因此直接给出了目标文件的目录,在应用了patch之后,hello1.c的内容变为了hello2.c的内容。

(5)使用說明。

如果patch失敗,patch命令會把成功的patch行補上其差異,同時(無條件)生成備份文件和一個.rej文件。.rej文件裏沒有成功提交的patch行,需要手工打上補丁。這種情況在源碼升級的時候有可能會發生。
在多數情況下,patch程序可以確定補丁文件的格式,當它不能識別時,可以使用-c、-e、-n或者-u選項來指定輸入的補丁文件的格式。由於只有GNU patch可以創建和讀取新版上下文格式的patch文件,因此,除非能夠確定補丁所面向的只是那些使用GNU工具的用戶,否則應該使用舊版上下文格式來生成補丁文件。
為了使patch程序能夠正常工作,需要上下文的行數至少是2行(即至少是有一處差別的文件)。
2.1.5 網絡相關命令

Linux下網絡相關的常見命令如表2.28所示,本書僅以ifconfigftp為例進行說明。

screenshot
1.ifconfig

(1)作用。

用於查看和配置網絡接口的地址和參數,包括ip地址、網絡掩碼、廣播地址,它的使用權限是超級用戶。

(2)格式。

ifconfig有兩種使用格式,分別用於查看和更改網絡接口。

① ifconfig [選項] [網絡接口]:用來查看當前系統的網絡配置情況。

② ifconfig 網絡接口 [選項] 地址:用來配置指定接口(如eth0、eth1)的IP地址、網絡掩碼、廣播地址等。

(3)常見參數。

ifconfig第二種格式的常見選項參數如表2.29所示。

screenshot

(4)使用实例。

首先,在本例中使用ifconfig的第一种格式来查看网络接口配置情况。

[root@localhost ~]# ifconfig
eth0   Link encap:Ethernet HWaddr 00:08:02:E0:C1:8A
      inet addr:192.168.1.70 Bcast:192.168.1.255
Mask:255.255.255.0
      inet6 addr: fe80::208:2ff:fee0:c18a/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
      RX packets:26931 errors:0 dropped:0 overruns:0 frame:0
      TX packets:3209 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:6669382 (6.3 MiB) TX bytes:321302 (313.7 KiB)
      Interrupt:11

lo     Link encap:Local Loopback
      inet addr:127.0.0.1 Mask:255.0.0.0
      inet6 addr: ::1/128 Scope:host
      UP LOOPBACK RUNNING MTU:16436 Metric:1
      RX packets:2537 errors:0 dropped:0 overruns:0 frame:0
      TX packets:2537 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0
      RX bytes:2093403 (1.9 MiB) TX bytes:2093403 (1.9 MiB)

可以看出,使用ifconfig的显示结果中详细列出了所有活跃接口的IP地址、硬件地址、广播地址、子网掩码、回环地址等。

[root@localhost workplace]# ifconfig eth0
eth0   Link encap:Ethernet HWaddr 00:08:02:E0:C1:8A
      inet addr: 192.168.1.70 Bcast:192.168.1.255 Mask:255.255.255.0
      inet6 addr: fe80::208:2ff:fee0:c18a/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
      RX packets:27269 errors:0 dropped:0 overruns:0 frame:0
      TX packets:3212 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:6698832 (6.3 MiB) TX bytes:322488 (314.9 KiB)
      Interrupt:11

在此例中,通过指定接口显示出对应接口的详细信息。另外,用户还可以通过指定参数“-a”来查看所有接口(包括非活跃接口)的信息。

接下来的示例指出了如何使用ifconfig的第二种格式来改变指定接口的网络参数配置。

[root@localhost ~]# ifconfig eth0 down
[root@localhost ~]# ifconfig
lo    Link encap:Local Loopback
      inet addr:127.0.0.1 Mask:255.0.0.0
      inet6 addr: ::1/128 Scope:Host
      UP LOOPBACK RUNNING MTU:16436 Metric:1
      RX packets:1931 errors:0 dropped:0 overruns:0 frame:0
      TX packets:1931 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0
      RX bytes:2517080 (2.4 MiB) TX bytes:2517080 (2.4 MiB)

在此例中,通过将指定接口的状态设置为DOWN,暂时停止该接口的工作。

[root@localhost ~]# ifconfig eth0 210.25.132.142 netmask 255.255.255.0
[root@localhost ~]# ifconfig
eth0   Link encap:Ethernet HWaddr 00:08:02:E0:C1:8A
      inet addr:210.25.132.142 Bcast:210.25.132.255 Mask:255.255.255.0
      inet6 addr: fe80::208:2ff:fee0:c18a/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
      RX packets:1722 errors:0 dropped:0 overruns:0 frame:0
      TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:147382 (143.9 KiB) TX bytes:398 (398.0 b)
      Interrupt:11
…

從上例可以看出,ifconfig改變了接口eth0的IP地址、子網掩碼等,在之後的ifconfig查看中可以看出確實發生了變化。

(5)使用說明。

用ifconfig命令配置的網絡設備參數不重啟就可生效,但在機器重新啟動以後將會失效,除非在網絡接口配置文件中進行修改。
2.ftp

(1)作用。

該命令允許用戶利用ftp協議上傳和下載文件。

(2)格式。

ftp [選項] [主機名/IP]。

ftp相關命令包括使用命令和內部命令,其中使用命令的格式如上所列,主要用於登錄到ftp服務器。內部命令是指成功登錄後進行的一系列操作,下面會詳細列出。若用戶默認“主機名/IP”,則可在轉入到ftp內部命令後繼續選擇登錄。

(3)常見參數。

ftp常見選項參數如表2.30所示。

screenshot

ftp常见内部命令如表2.31所示。

screenshot
screenshot
screenshot

(4)使用实例。

首先,在本例中使用ftp命令访问“ftp://study.byr.edu.cn”站点。

[root@localhost ~]# ftp study.byr.edu.cn
Connected to study.byr.edu.cn.
220 Microsoft FTP service
500 'AUTH GSSAPI': command not understood
500 'AUTH KERBEROS_V4': command not understood
KERBEROS_V4 rejected as an authentication type
Name (study.byr.edu.cn:root): anonymous
331 Anonymous access allowed, send identity (e-mail name) as password.
Password:
230 Anonymous user logged in.
Remote system type is Windows_NT.
 注意

由于该站点可以匿名访问,因此,在用户名处输入anonymous,在Password处输入任意一个e-mail地址即可登录成功。
ftp> dir
227 Entering Passive Mode (211,68,71,83,11,94).
125 Data connection already open; Transfer starting.
11-20-05 05:00PM    <DIR>     Audio
12-04-05 09:41PM    <DIR>     BUPT_NET_Material
01-07-06 01:38PM    <DIR>     Document
11-22-05 03:47PM    <DIR>     Incoming
01-04-06 11:09AM    <DIR>     Material
226 Transfer complete.

以上使用ftp内部命令dir列出了在该目录下文件及目录的信息。

ftp> cd /Document/Wrox/Wrox.Beginning.SQL.Feb.2005.eBook-DDU
250 CWD command successful.
ftp> pwd
257 "/Document/Wrox/Wrox.Beginning.SQL.Feb.2005.eBook-DDU" is current directory.

以上实例通过cd命令进入相应的目录,可通过pwd命令进行验证。

ftp> lcd /root/workplace
Local directory now /root/workplace
ftp> get d-wbsq01.zip
local: d-wbsq01.zip remote: d-wbsq01.zip
200 PORT command successful.
150 Opening ASCII mode data connection for d-wbsq01.zip(1466768 bytes).
WARNING! 5350 bare linefeeds received in ASCII mode
File may not have transferred correctly.
226 Transfer complete.
1466768 bytes received in 1.7 seconds (8.6e+02 Kbytes/s)

接下来通过lcd命令首先改变用户的本地工作目录,也就是希望下载或上传的工作目录,接着通过get命令进行下载文件。由于ftp默认使用ASCII模式,因此,若希望改为其他模式如“bin”,直接输入bin即可,如下所示:

ftp> bin
200 Type set to I.
ftp> bye
221

最後用bye命令退出ftp程序。

(5)使用說明。

若是需要匿名登錄,則在“Name (...):”處鍵入anonymous,在“Password:”處鍵入自己的E-mail地址即可。
若要傳送二進制文件,務必要把模式改為bin。

延伸阅读

评论