在 Linux 中,就像任何類 Unix 操作系統,一切都只是文件。而 Unix 哲學指出,配置文件必須是人類可讀和可編輯的。在幾乎所有的情況下,它們只是純文本。所以,首先,你必須學習如何編輯文本文件。
為此,我強烈建議你學習 vim 的基礎知識,這是在 Linux 中處理文本的最強大的工具之一。Vim 是由 Bill Joy 于 1976 年編寫的,\[vi\](http://en.wikipedia.org/wiki/Vi) 的重新實現。vi 實現了一個非常成功的概念,甚至 Microsoft Visual Studio 2012 有一個\[插件\](http://visualstudiogallery.msdn.microsoft.com/59ca71b3-a4a3-46ca-8fe1-0e90e3f79329/),它提供了一個模式,與這個編輯器兼容。你可以在這里玩轉它(\[這是在瀏覽器中運行的真正的 Linux\](https://bellard.org/jslinux/vm.html?url=https://bellard.org/jslinux/buildroot-x86.cfg))。
或者你也通過這個鏈接了解更多 \[nano\](http://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/)來代替。但至少要試試。
現在,登入`vm1`,之后鍵入:
```
vim hello.txt
```
你應該看到:
```
Hello, brave adventurer!
~
~
~
~
~
~
~
~
~
~
~
~
~
"hello.txt" \[New File\] ? ? ?0,0-1 ? ? ? ? All
```
有一個笑話這樣說道,vim有兩種模式 - “反復嗶嗶”和“破壞一切”。那么,如果你不知道如何使用 vim,這是非常真實的,因為 vim 是模態的文本編輯器。這兩種模式是:
+ 普通模式:移動光標并執行刪除,復制和粘貼等文本操作。
+ 插入模式:輸入文本。
這可能會令新手感到頭疼,因為他們試圖盡可能地避免普通模式。然而這是錯誤的,現在我將給你正確的方法來使用 vim :
```
start vim
while editing is not finished, repeat
? ? navigate to desired position in NORMAL mode
? ? enter INSERT mode by pressing i
? ? ? ? type text
? ? exit INSERT mode by pressing
when editing is finished, type :wq
```
我們平常使用時,幾乎任何時候都呆在普通模式,短時間內進入插入模式,然后立即退出。以這種方式,vim 只有一種模式,而這種模式是普通模式。
現在讓我們試試吧。記住,按`i`進入插入模式,以及`` 返回到普通模式。鍵入以下內容(在每行末尾按``):
```
iRoses are red
Linux is scary
```
這是你應該看到的:
```
Roses are red
Linux is scary
~
~
~
~
~
~
~
~
~
~
~
~
~
? ? ? ? ? ? ? ? ? ? ? ? ? ? 4,17 ? ? ? ? ?All
```
現在給出一些常用的命令,在普通模式下移動光標:
+ `h` - 向左移動
+ `j` - 向下移動
+ `k` - 向上移動
+ `l` - 右移
+ `i` - 進入插入模式
+ `o` - 在光標下插入一行并進入插入模式
+ `` - 退出插入模式
+ `x` - 刪除光標下的符號
+ `dd` - 刪除一行
+ `:wq` - 將更改寫入文件并退出。是的,沒錯,這是一個冒號,后面跟著`wq`和``。
+ `:q!` - 不要對文件進行更改并退出。
那就夠了。現在,將光標放在第一行并輸入:
```
oViolets are blue
```
之后,將光標放在`Linux is scary`那一行,并輸入:
```
oBut I'm scary too
```
你應該看到:
```
Roses are red
Violets are blue
Linux is scary
But I'm scary too
~
~
~
~
~
~
~
~
~
~
~
? ? ? ? ? ? ? ? ? ? ? ? ? ? 4,17 ? ? ? ? ?All
```
現在鍵入`:wq`保存文件,并退出。你應該看到:
```
Violets are blue
Linux is scary
But I'm scary too
~
~
~
~
~
~
~
~
~
~
~
"hello.txt" 4L, 64C written
user1@vm1:~$
```
好的。你做到了。你剛剛在 vim 中編輯了文本文件,很好很強大!
\## 附加題
+ 通過鍵入鍵入`vim hello.txt`再次啟動 vim,并嘗試我給你的一些命令。
+ 玩這個游戲,它會讓你更熟悉 vim:
- 前言:為什么要學數據結構和算法?
- 第一章:數據結構和算法
- 什么是數據結構?
- 什么是算法?
- 1.從接口開始
- 2.算法分析
- 3.ArrayList
- 4.LinkedList
- 5.雙鏈表
- 6.樹的遍歷
- 7.到達的哲學
- 8.索引器
- 9.Map接口
- 10.哈希
- 11.HashMap
- 12.TreeMap-二叉樹
- 13.二叉搜索樹
- 14.數據持久化
- 15.排序
- 第二章:經典算法解析
- 1.兩數之和
- 2.兩數相加
- 3.無重復字符的最長子字符串
- 4.兩個排序數組的中值
- 5.最長回文子串
- 6.鋸齒形變換
- 7.反轉整數
- 8.合并K個排序列表
- 9.鏈表循環
- 10.除Self之外的數組乘積
- 11.4的威力
- 12.蛙跳
- 13.將交叉口大小設置為至少兩個
- 14.最大的塊,使其分類
- 15.到達點
- 16.階乘零點函數的前像大小
- 17.建造一個大的島嶼
- 18.唯一字母串
- 19.樹的距離之和
- 20.猜詞游戲
- 21.節點的最短路徑
- 22.矩形區域II
- 23.K-相似字符串
- 24.雇傭K工人的最低成本
- 25.至少為K的最短子陣
- 26.獲取所有key的最短路徑
- 27.加油站的最小數量
- 28.有利可圖的計劃
- 29.細分圖中的可達節點
- 30.超級蛋掉落
- 31.最大頻率疊加
- 32.有序隊列
- 33.最多N個給定數字集的數字
- 34.DI序列的有效置換
- 35.貓和老鼠
- 第三章:高級算法解析
- 找出數組中重復的數字
- 不修改數組找出重復的數字
- 二維數組中的查找
- 替換空格
- 從尾到頭打印鏈表
- 重建二叉樹
- 二叉樹的下一個結點
- 用兩個棧實現隊列
- 用兩個隊列實現棧用兩個隊列實現棧
- 斐波那契數列
- 跳臺階
- 變態跳臺階
- 矩形覆蓋
- 旋轉數組的最小數字
- 矩陣中的路徑
- 機器人的移動范圍
- 剪繩子
- 二進制中 1 的個數
- 數值的整數次方
- 打印從 1 到最大的 n 位數
- 在O(1)時間內刪除鏈表節點
- 刪除鏈表中重復的節點
- 正則表達式匹配
- 表示數值的字符串
- 調整數組順序使奇數位于偶數前面
- 鏈表中倒數第k個結點
- 鏈表中環的入口結點
- 反轉鏈表
- 合并兩個排序的鏈表
- 樹的子結構
- 二叉樹的鏡像
- 對稱的二叉樹
- 順時針打印矩陣
- 包含min函數的棧
- 棧的壓入、彈出序列
- 不分行從上到下打印二叉樹
- 把二叉樹打印成多行
- 按之字形打印二叉樹
- 二叉搜索樹的后序遍歷序列
- 二叉樹中和為某一值的路徑
- 復雜鏈表的復制
- 二叉搜索樹與雙向鏈表
- 序列化二叉樹
- 字符串的排列
- 數組中出現次數超過一半的數字
- 獲取數組中最小的k個數
- 數據流中的中位數
- 連續子數組的最大和
- 整數中1出現的次數
- 數字序列中某一位的數字
- 把數組排成最小的數
- 把數字翻譯成字符串
- 禮物的最大價值
- 最長不含重復字符的子字符串
- 丑數
- 第一個只出現一次的字符
- 字符流中第一個不重復的字符
- 兩個鏈表的第一個公共結點
- 數字在排序數組中出現的次數
- 0到n-1中缺失的數字
- 數組中數值和下標相等的元素
- 二叉搜索樹的第k個結點
- 二叉樹的深度
- 平衡二叉樹
- 數組中只出現一次的兩個數字
- 數組中唯一只出現一次的數字
- 和為S的兩個數字
- 和為S的連續正數序列
- 翻轉單詞順序
- 左旋轉字符串
- 滑動窗口的最大值
- 撲克牌的順子
- 第四章:設計模式
- 設計模式概述
- 創建型模式
- 工廠方法
- 抽象工廠
- 生成器
- 原型
- 單例
- 結構型模式
- 適配器
- 橋接
- 組合
- 裝飾器
- 外觀
- 享元
- 代理
- 行為模式
- 責任鏈
- 命令
- 迭代器
- 中介者
- 備忘錄
- 觀察者
- 狀態
- 策略
- 模板方法
- 訪問者
- 第五章:服務器運維
- 1.從vim編輯器開始
- 2.文本瀏覽器
- 3.Bash:Shell、.profile、.bashrc、.bash_history
- 4.Bash:處理文件,pwd,ls,cp,mv,rm,touch
- 5.Bash:環境變量,env,set,export
- 6.Bash:語言設置,LANG,locale,dpkg-reconfigure locales
- 7.Bash:重定向,stdin,stdout,stderr,tee,pv
- 8.更多的重定向和過濾:head,tail,awk,grep,sed
- 9.Bash:任務控制,jobs,fg
- 10.Bash:程序退出代碼(返回狀態)
- 11:總結
- 12.文檔:man,info
- 13.文檔:Google
- 14.包管理:Debian 包管理工具aptitude
- 15.系統啟動:運行級別,/etc/init.d,rcconf,update-rc.d
- 16.處理進程,ps,kill
- 17.任務調度:cron,at
- 18.日志:/var/log,rsyslog,logger
- 19.文件系統:掛載,mount,/etc/fstab
- 20.文件系統:修改和創建文件系統,tune2fs,mkfs
- 21.文件系統:修改根目錄,chroot
- 22.文件系統:移動數據,tar,dd
- 23.文件系統:權限,chown,chmod,umask
- 24.接口配置,ifconfig,netstat,iproute2,ss,route
- 25.網絡:配置文件,/etc/network/interfaces
- 26.網絡:封包過濾配置,iptables
- 27.安全 Shell,ssh,sshd,scp
- 28.性能:獲取性能情況,uptime,free,top
- 29.內核:內核消息,dmesg
- 最后:打磨、洗練、重復:總復習
- 最終章:深入學習
- 算法思維導圖
- 學習目標
- 學習路線
- 學習要點
- 學習大綱
- 資源推薦