创建游戏场(实战演习)
用到的指令:
?
在創建游戲場之前,先要復習一個關于鏈接的知識:
?
ln 命令即可創建硬鏈接,也可以創建符號鏈接。可以用其中一種方法來使用它:
ln file link
創建硬鏈接,和:
ln -s item link
創建符號鏈接,“item” 可以是一個文件或是一個目錄。
硬鏈接
硬鏈接和符號鏈接比起來,硬鏈接是最初 Unix 創建鏈接的方式,而符號鏈接更加現代。在
默認情況下,每個文件有一個硬鏈接,這個硬鏈接給文件起名字。當我們創建一個硬鏈接以后,
就為文件創建了一個額外的目錄條目。硬鏈接有兩個重要局限性:
1. 一個硬鏈接不能關聯它所在文件系統之外的文件。這是說一個鏈接不能關聯與鏈接本身
不在同一個磁盤分區上的文件。
2. 一個硬鏈接不能關聯一個目錄。
一個硬鏈接和文件本身沒有什么區別。不像符號鏈接,當你列出一個包含硬鏈接的目錄內
容時,你會看到沒有特殊的鏈接指示說明。當一個硬鏈接被刪除時,這個鏈接被刪除,但是文
件本身的內容仍然存在(這是說,它所占的磁盤空間不會被重新分配),直到所有關聯這個文
件的鏈接都刪除掉。知道硬鏈接很重要,因為你可能有時會遇到它們,但現在實際中更喜歡使
用符號鏈接,下一步我們會討論符號鏈接。
符號鏈接
創建符號鏈接是為了克服硬鏈接的局限性。符號鏈接生效,是通過創建一個特殊類型的文
件,這個文件包含一個關聯文件或目錄的文本指針。在這一方面,它們和 Windows 的快捷方
式差不多,當然,符號鏈接早于 Windows 的快捷方式很多年;-)
一個符號鏈接指向一個文件,而且這個符號鏈接本身與其它的符號鏈接幾乎沒有區別。例
如,如果你往一個符號鏈接里面寫入東西,那么相關聯的文件也被寫入。然而,當你刪除一個
符號鏈接時,只有這個鏈接被刪除,而不是文件自身。如果刪除這個文件早于文件的符號鏈接,
這個鏈接仍然存在,但是不指向任何東西。在這種情況下,這個鏈接被稱為壞鏈接。在許多實
現中,ls 命令會以不同的顏色展示壞鏈接,比如說紅色,來顯示它們的存在。
關于鏈接的概念,看起來很迷惑,但不要膽怯。我們將要試著練習這些命令,希望,它變
得清晰起來。
創建游戲場(實戰演習)
下面我們將要做些真正的文件操作,讓我們先建立一個安全地帶,來玩一下文件操作命令。
首先,我們需要一個工作目錄。在我們的主目錄下創建一個叫做 “playground” 的目錄。
再在playground下創建dir1和dir2,一次性創建mkdir -p可以多層目錄一起:
下一步,讓我們得到一些數據到我們的游戲場中。通過復制一個文件來實現目的。使用 cp
命令,我們從/etc 目錄復制 passwd 文件到當前工作目錄下:
現在,僅僅是為了高興,重復操作復制命令,使用 “-v” 選項(嘮叨),看一個它的作用:?
cp 命令再一次執行了復制操作,但是這次顯示了一條簡潔的信息,指明它進行了什么操
作。注意,cp 沒有警告,就重寫了第一次復制的文件。這是一個案例,cp 假定你知道你的所
作所為。為了得到警示信息,在命令中包含 “-i” 選項。
響應命令提示信息,輸入 “y”,文件就會被重寫,其它的字符(例如,”n”)會導致 cp 命令
不理會文件。
現在,“passwd” 這個名字,看起來不怎么有趣,這是個游戲場,所以我們給它改個名字:
讓我們來傳送 fun 文件,通過移動重命名的文件到各個子目錄,然后再把它移回到當前目錄:
?
最后,再把 fun 文件帶回到當前工作目錄:
接下來,我們復制目錄:
首先還是先把fun移動到dir1下。
然后移動 dir1 到 dir2 目錄,用 ls 來確認執行結果;
注意:因為目錄 dir2 已經存在,mv 命令移動 dir1 到 dir2 目錄。如果 dir2 不存在,mv 會重新命名 dir1 為 dir2。
最后,再把所有的東西放回原處。
現在,我們試著創建鏈接。首先是硬鏈接。我們創建一些關聯我們數據文件的鏈接:
?
?
注意到一件事,列表中,文件 fun 和 fun-hard 的第二個字段是 “4”,這個數字是文件 “fun”
的硬鏈接數目。你要記得一個文件至少有一個硬鏈接,因為文件名就是由鏈接創建的。所以,
我們怎樣知道實際上 fun 和 fun-hard 是一樣的文件呢?在這個例子里,ls 不是很有用。雖然我
們能夠看到 fun 和 fun-hard 文件大小一樣(第五字段),但我們的列表沒有提供可靠的信息來
確定(這兩個文件一樣)。
當考慮到硬鏈接,想象文件是由兩部分組成:數據部分包含文件的內容,名字部分包含文
件的名字,這樣可以幫助理解。當我們創建了文件的硬鏈接,實際上,我們給文件添加了額外
的名字,這些名字都涉及一樣的數據內容。系統分配了一系列的盤塊給所謂的索引節點,它和
文件名字想關聯。因此每個硬鏈接都關系到一個具體的索引節點,這個節點包含了文件的內
容。
ls 命令有一種方法,來展示(文件索引節點)的信息。在命令中加上 “-i” 選項:
在這個版本的列表中,第一字段表示文件索引節點號,正如我們所見到的,fun 和 fun-hard共享一樣的索引節點號,這就證實這兩個文件是一樣的文件。
創建符號鏈接
建立符號鏈接的目的是為了克服硬鏈接的兩個缺點:硬鏈接不能跨越物理設備,硬鏈接不
能關聯目錄,只能是文件。符號鏈接是文件的特殊類型,它包含一個指向目標文件或目錄的文
本指針。
符號鏈接的建立過程相似于創建硬鏈接:
記住,當我們創建一個符號鏈接的時候,會建立一個目標文件在那里和符號鏈接有關聯的文本描述。如果我們看看 ls 命令的輸出結果,比較容易理解。
目錄 dir1 中,fun-sym 的列表說明了它是一個符號鏈接,通過在第一字段中的首字符 “l”
可知,并且它還指向 “../fun”,也是正確的。相對于 fun-sym 的存儲位置,fun 在它的上一個目
錄。同時注意,符號鏈接文件的長度是 6,這是字符串 “../fun” 所包含的字符數,而不是符號
鏈接所指向的文件長度。
當建立符號鏈接時,你即可以使用絕對路徑名:
?
?
也可用相對路徑名,正如前面例題所展示的。使用相對路徑名更令人滿意,因為它允許一
個包含符號鏈接的目錄重命名或移動,而不會破壞鏈接。
除了普通文件,符號鏈接也能關聯目錄:
正如我們之前討論的,rm 命令被用來刪除文件和目錄。我們將要使用它來清理一下我們的
游戲場。首先,刪除一個硬鏈接:
結果不出所料。文件 fun-hard 消失了,文件 fun 的鏈接數從 4 減到 3,正如目錄列表第二字段所示。
下一步,我們會刪除文件 fun:
在提示符下輸入 “y”,刪除文件。讓我們看一下 ls 的輸出結果。注意,fun-sym 發生了什么
事? 因為它是一個符號鏈接,指向已經不存在的文件,鏈接已經壞了:
大多數 Linux 的發行版本配置 ls 顯示損壞的鏈接。在 ubuntu系統中,壞的鏈接以閃爍的
紅色文本顯示!損壞鏈接的出現,并不危險,但是相當混亂。如果我們試著使用損壞的鏈接,
會看到以下情況:
稍微清理一下現場。刪除符號鏈接:
對于符號鏈接,有一點值得記住,執行的大多數文件操作是針對鏈接的對象,而不是鏈接
本身。而 rm 命令是個特例。當你刪除鏈接的時候,刪除鏈接本身,而不是鏈接的對象。(這句話上面意思呢?測試例程如下:)
{
建立一個main.c,寫入hello內容,創建符號鏈接main-sym,然后把main-sym的更改為hello world,最后查看main.c,main.c也被更改。但是rm指令是個特例哦,刪除的就是鏈接符號,而不是鏈接對象。
?
}
最后,我們將刪除我們的游戲場。為了完成這個工作,我們將返回到我們的主目錄,然后
用 rm 命令加上選項 (-r),來刪除目錄 playground,和目錄下的所有內容,包括子目錄
?
總結
在這一章中,我們已經研究了許多基礎知識。我們得花費一些時間來全面的理解。反復練
習 playground 例題,直到你覺得它有意義。能夠良好的理解基本文件操作命令和通配符,非
常重要。空閑時,通過添加文件和目錄來拓展 playground 練習,使用通配符來為各種各樣的
操作命令指定文件。關于鏈接的概念,在剛開始接觸時會覺得有點迷惑,花些時間來學習它們
是怎樣工作的。它們能成為真正的救星。
轉載于:https://www.cnblogs.com/yangguang-it/p/7084164.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的创建游戏场(实战演习)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JSON 总结
- 下一篇: Linux 下crontab简单使用