Linux基礎命令(二):文件目錄操作及命令使用——cp,mv,mkdir,rm,ln,通配符,命令類型,type,which,help,man,apropos,whatis,info,alias

操作文件和目錄

cp — 複製文件和目錄

mv — 移動/重命名文件和目錄

mkdir — 創建目錄

rm — 刪除文件和目錄

ln — 創建硬鏈接和符號鏈接

如果是簡單的文件和目錄操作任務,使用圖形化界面的文件管理器會更容易些,但是對於複雜的文件操作任務,則使用命令行更方便,因爲有通配符的存在。(eg:如何拷貝一個目錄下的所有HTML文件)

通配符

 因爲 shell 頻繁地使用文件名,shell 提供了特殊字符來幫助你快速指定一組文件名。這些特殊字符叫做通配符。使用通配符(文件名代換)允許你依據字符的組合模式來選擇文件名。

接受文件名作爲參數的任何命令,都可以使用通配符。

通配符
通配符 意義
* 匹配任意多個字符(包括零個或一個)
? 匹配任意一個字符(不包括零個)
[characters] 匹配任意一個屬於字符集中的字符
[!characters] 匹配任意一個不是字符集中的字符
[[:class:]] 匹配任意一個屬於指定字符類中的字符
普遍使用的字符類
字符類 意義
[:alnum:] 匹配任意一個字母或數字
[:alpha:] 匹配任意一個字母
[:digit:] 匹配任意一個數字
[:lower:] 匹配任意一個小寫字母
[:upper:] 匹配任意一個大寫字母
通配符範例
模式 匹配對象
* 所有文件
g* 文件名以“g”開頭的文件
b*.txt 以"b"開頭,中間有零個或任意多個字符,並以".txt"結尾的文件
Data??? 以“Data”開頭,其後緊接着3個字符的文件
[abc]* 文件名以"a","b",或"c"開頭的文件
BACKUP.[0-9][0-9][0-9] 以"BACKUP."開頭,並緊接着3個數字的文件
[[:upper:]]* 以大寫字母開頭的文件
[![:digit:]]* 不以數字開頭的文件
*[[:lower:]123] 文件名以小寫字母結尾,或以 “1”,“2”,或 “3” 結尾的文件

字符範圍

使用字符集的時候可以利用中劃線表示字符範圍,比如[a-e]、[1-6]。

通配符在 GUI 中也有效

  • 在 Nautilus (GNOME 文件管理器)中,可以通過 Edit/Select 模式菜單項來選擇文件。 輸入一個用通配符表示的文件選擇模式後,那麼當前所瀏覽的目錄中,所匹配的文件名就會高亮顯示。
  • 在 Dolphin 和 Konqueror(KDE 文件管理器)中,可以在地址欄中直接輸入通配符。例如, 如果你想查看目錄 /usr/bin 中,所有以小寫字母 ‘u’ 開頭的文件, 在地址欄中敲入 ‘/usr/bin/u*‘,則 文件管理器會顯示匹配的結果。

創建目錄

mkdir directory...

注意表示法:在描述一個命令時,當有三個圓點跟在一個命令的參數後面, 這意味着那個參數可以有多個。(eg:mkdir dir1 dir2 dir3)

複製文件和目錄

可以將一個文件中的內容複製到另一個文件中。

cp item1 item2

可以複製單個或多個項目(文件和目錄)到一個目錄下。

cp item... directory
cp 選項
選項 意義
-a, --archive 複製文件和目錄,以及它們的屬性,包括所有權和權限。 通常,複本具有用戶所操作文件的默認屬性。
-i, --interactive 在重寫已存在文件之前,提示用戶確認。如果這個選項不指定, cp 命令會默認重寫文件。
-r, --recursive 遞歸地複製目錄及目錄中的內容。當複製目錄時, 需要這個選項(或者-a 選項)。
-u, --update 當把文件從一個目錄複製到另一個目錄時,僅複製 目標目錄中不存在的文件,或者是文件內容新於目標目錄中已經存在的文件。
-v, --verbose 顯示翔實的命令操作信息
cp 實例
命令 運行結果
cp file1 file2 複製文件 file1 內容到文件 file2。如果 file2 已經存在, file2 的內容會被 file1 的內容重寫。如果 file2 不存在,則會創建 file2。
cp -i file1 file2 這條命令和上面的命令一樣,除了如果文件 file2 存在的話,在文件 file2 被重寫之前, 會提示用戶確認信息。
cp file1 file2 dir1 複製文件 file1 和文件 file2 到目錄 dir1。目錄 dir1 必須存在。
cp dir1/* dir2 使用一個通配符,在目錄 dir1 中的所有文件都被複制到目錄 dir2 中。 dir2 必須已經存在。
cp -r dir1 dir2 複製目錄 dir1 中的內容到目錄 dir2。如果目錄 dir2 不存在, 創建目錄 dir2,操作完成後,目錄 dir2 中的內容和 dir1 中的一樣。 如果目錄 dir2 存在,則目錄 dir1 (和目錄中的內容)將會被複制到 dir2 中。

移動和重命名文件

mv 命令可以執行文件移動和文件命名任務,這依賴於你怎樣使用它。任何一種 情況下,完成操作之後,原來的文件名不再存在。

把文件或目錄 “item1” 重命名爲 “item2”。

mv item1 item2

把一個或多個條目從一個目錄移動到另一個目錄中。

mv item... directory
mv 選項
選項 意義
-i --interactive 在重寫一個已經存在的文件之前,提示用戶確認信息。 如果不指定這個選項,mv 命令會默認重寫文件內容。
-u --update 當把文件從一個目錄移動另一個目錄時,只是移動不存在的文件, 或者文件內容新於目標目錄相對應文件的內容。
-v --verbose 當操作 mv 命令時,顯示翔實的操作信息。
mv 實例
mv file1 file2

移動 file1 到 file2。如果 file2 存在,它的內容會被 file1 的內容重寫。 如果 file2 不存在,則創建 file2。 這兩種情況下,file1 都不再存在。

mv -i file1 file2 除了如果 file2 存在的話,在 file2 被重寫之前,用戶會得到提示信息外,這個和上面的選項一樣。
mv file1 file2 dir1 移動 file1 和 file2 到目錄 dir1 中。dir1 必須已經存在。
mv dir1 dir2 如果目錄 dir2 不存在,創建目錄 dir2,並且移動目錄 dir1 的內容到目錄 dir2 中,同時刪除目錄 dir1。如果目錄 dir2 存在,移動目錄 dir1(及它的內容)到目錄 dir2。

刪除文件和目錄

rm item...
rm 選項
選項 意義
-i, --interactive 在刪除已存在的文件前,提示用戶確認信息。 如果不指定這個選項,rm 會默默地刪除文件
-r, --recursive 遞歸地刪除文件,這意味着,如果要刪除一個目錄,而此目錄 又包含子目錄,那麼子目錄也會被刪除。要刪除一個目錄,必須指定這個選項。
-f, --force 忽視不存在的文件,不顯示提示信息。這選項覆蓋了“--interactive”選項。
-v, --verbose 在執行 rm 命令時,顯示翔實的操作信息。
rm 實例
命令 運行結果
rm file1 默默地刪除文件
rm -i file1 除了在刪除文件之前,提示用戶確認信息之外,和上面的命令作用一樣。
rm -r file1 dir1 刪除文件 file1, 目錄 dir1,及 dir1 中的內容。
rm -rf file1 dir1 同上,除了如果文件 file1,或目錄 dir1 不存在的話,rm 仍會繼續執行。

小貼士: 當你使用帶有通配符的rm命令時(除了仔細檢查輸入的內容外), 先用 ls 命令來測試通配符。這會讓你看到將要被刪除的文件是什麼。然後按下上箭頭按鍵,重新調用剛剛執行的命令,用 rm 替換 ls。

命令的使用

type – 說明怎樣解釋一個命令名

which – 顯示會執行哪個可執行程序

man – 顯示命令手冊頁

apropos – 顯示一系列適合的命令

info – 顯示命令 info

whatis – 顯示一個命令的簡潔描述

alias – 創建命令別名

什麼是命令

命令可以是下面四種類型之一:

  1. 是一個可執行程序,就像我們所看到的位於目錄/usr/bin 中的文件一樣。 這一類程序可以是用諸如 C 和 C++語言寫成的程序編譯的二進制文件, 也可以是由諸如shell,perl,python,ruby等等腳本語言寫成的程序 。

  2. 是一個內建於 shell 自身的命令。bash 支持若干命令,內部叫做 shell 內部命令 (builtins)。例如,cd 命令,就是一個 shell 內部命令。

  3. 是一個 shell 函數。這些是小規模的 shell 腳本,它們混合到環境變量中。 在後續的內容裏,我們將討論配置環境變量以及書寫 shell 函數。但是現在, 僅僅意識到它們的存在就可以了。

  4. 是一個命令別名。我們可以定義自己的命令,建立在其它命令之上。

顯示命令的類型

type 命令是 shell 內部命令,它會顯示命令的類別。

type command

顯示一個可執行程序的位置

which command

這個命令只對可執行程序有效,不包括內建命令和命令別名,別名是真正的可執行程序的替代物。 當我們試着使用 shell 內建命令時,例如,cd 命令,我們或者得不到迴應,或者是個錯誤信息。

在zsh中,顯示命令位置的關鍵字是where。

得到 shell 內建命令的幫助文檔

help command

注意表示法:出現在命令語法說明中的方括號,表示可選的項目。一個豎槓字符表示互斥選項。(eg:cd [-L|-P] [dir])

顯示用法信息

許多可執行程序支持一個 --help 選項,這個選項是顯示命令所支持的語法和選項說明。

command --help

顯示程序手冊頁

許多希望被命令行使用的可執行程序,提供了一個正式的文檔,叫做手冊或手冊頁(man page)。

man command

在大多數 Linux 系統中,man 使用 less 工具來顯示參考手冊,所以當瀏覽文檔時, less 命令都能有效。

man 所顯示的參考手冊,被分成幾個章節,它們不僅僅包括用戶命令,也包括系統管理員命令、程序接口、文件格式等等。

手冊頁的組織形式
章節 內容
1 用戶命令
2 程序接口內核系統調用
3 C 庫函數程序接口
4 特殊文件,比如說設備結點和驅動程序
5 文件格式
6 遊戲娛樂,如屏幕保護程序
7 其他方面
8 系統管理員命令

我們可以指定章節號來查看需要的信息。尤其是如果我們要查找一種文件格式,而同時它也是一個命令名時,不指定章節號將總是得到第一個匹配項。

man chapternumber command

顯示適當的命令

apropos keyword

基於關鍵詞,搜索參考手冊列表中可能的匹配項。

輸出結果每行的第一個字段是手冊頁的名字,第二個字段展示章節。注意,man 命令加上”-k”選項, 和 apropos 完成一樣的功能。

顯示非常簡潔的命令說明

whatis 程序顯示匹配特定關鍵字的手冊頁的名字和一行命令說明。

whatis command

顯示程序 Info 條目

GNU 項目提供了一個命令程序手冊頁的替代物,稱爲”info”。info 內容可通過 info 閱讀器 程序讀取。info 頁是超級鏈接形式的,和網頁很相似。

info command

info 程序讀取 info 文件,info 文件是樹型結構,分化爲各個結點,每一個結點包含一個題目。 info 文件包含超級鏈接,可以讓你從一個結點跳到另一個結點。超級鏈接可通過它開頭的星號來辨別出來,把光標放在它上面並按下 enter 鍵,就可以激活它。

info 命令
命令 行爲
? 顯示命令幫助
PgUp or Backspace 顯示上一頁
PgDn or Space 顯示下一頁
n 下一個 - 顯示下一個結點
p 上一個 - 顯示上一個結點
u Up - 顯示當前所顯示結點的父結點,通常是個菜單
Enter 激活光標位置下的超級鏈接
q 退出

我們所討論的大多數命令行程序,屬於 GNU 項目”coreutils”包,所以輸入:info coreutils 將會顯示一個包含超級鏈接的手冊頁,這些超級鏈接指向包含在 coreutils 包中的各個程序。

README 和其它程序文檔

許多安裝在系統中的軟件,都有自己的文檔文件,這些文件位於/usr/share/doc 目錄下。 這些文件大多數是以文本文件的形式存儲的,可用 less 閱讀器來瀏覽。一些文件是 HTML 格式, 可用網頁瀏覽器來閱讀。我們可能遇到許多以”.gz”結尾的文件。這表示 gzip 壓縮程序 已經壓縮了這些文件。gzip 軟件包包括一個特殊的 less 版本,叫做 zless,zless 可以顯示由 gzip 壓縮的文本文件的內容。

用別名(alias)創建自己的命令

命令行小技巧,我們可以把多個命令放在同一行,命令之間用";"分開即可。

command1; command2; command3...

通過 alias 命令可以把這一串命令轉變爲一個命令。

alias new_command='command1; command2; command3...'

刪除別名,使用 unalias 命令。

unalias new_command

雖然要儘量避免使用已經存在的命令名來命名別名,但是通常我們會把一個普遍用到的參數選項加到常用的命令後面。(例如 ls 命令,其實是 ls --color=tty 的別名,加入了色彩支持)

注意:在命令行中定義的別名,是有生命週期的。當你的 shell 會話結束時,它們會消失。如果希望別名一直存在,需要爲其配置系統環境。

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章