大家好,我是雲計算磊哥,從業20年的IT老鳥。運維培訓15年,總結了一套從入門到精通的全運維開發寶典手冊。準備用300天時間寫一套博文,手把手從安裝軟件講起,從行業到產品,從過去到未來,從理論到操作,從視頻到文檔工具,一站式。從零基礎入門到20k運維開發工程師崗位諸多就業問題。多方位全方面的給你講清楚雲計算這個行業該如何做。關注我。後續更精彩。
------------------------------------------------------------------------------------------------
上篇文章中已經介紹了文件目錄與路徑和目錄與文件操作,下面將介紹Vim文本編輯器、文件時間和文件類型的內容。
一, Vim文本編輯器
Linux系統上的編輯器是對一些服務配置和文件編輯的工具,類似於Windows系統中的記事本。Vi編輯器是Linux上最基本的文本編輯器,工作在字符模式下,效率非常高。儘管在Linux上也有很多圖形界面的編輯器可用,如gedit編輯器,但在系統和服務器管理中,Vi編輯器的功能是那些圖形編輯器所無法比擬的。Vim是Vi的增強版,如果計算機上沒有安裝Vim,可以使用下面命令下載安裝。
[root@localhost ~]# which vim
/usr/bin/vim
[root@localhost ~]# yum -y install vim-enhanced
Vim編輯器主要有三種模式:命令模式、編輯模式和末行模式(擴展命令模式)。
命令模式:控制光標,對文件進行復制、粘貼、刪除、查詢等操作。
編輯模式:進行文本錄入與更改。
末行模式:文檔保存與退出,設置編輯環境。
每個模式下都有不同的命令快捷鍵,和圖形界面相比有些抽象,但當用户熟練這些操作之後,工作效率就會比圖形界面高很多。
當打開Vim編輯器後,默認進入命令模式,進入其他模式的指令以命令模式發起的,例如,按i鍵進入編輯模式。此時如果進入末行模式,用户需要先按Esc鍵返回到命令模式,然後輸入“:”即可,如圖所示。
二, 命令模式下的常用命令
光標定位常用的命令如表所示。
|
命令 |
説明 |
|
h、j、k、l |
光標上下左右移動,也可用鍵盤自帶方向鍵 |
|
0和$ |
光標移動到行首、行尾 |
|
gg和G |
光標移動到第三行,移動到第n行 |
|
/字符串 |
(n N可循環的),快速定位到某一行 |
|
/^d |
定位首字母為d的行 |
|
/txt$ |
定位結尾為txt的行 |
文本編輯常見的命令如表所示。
|
命令 |
説明 |
|
yy |
複製當前行 |
|
dd |
刪除當前行 |
|
p |
粘貼 |
|
x |
刪除光標所在的字符 |
|
D |
從光標處刪除到行尾 |
|
u |
undo撤銷 |
|
^r |
redo重做 |
|
r |
可以用來修改一個字符 |
命令和命令也可以組合,作用也是疊加的,例如,3yy、ygg、yG、dgg、dG等等,讀者需平時多加練習。
從命令模式進入其他模式常見的命令如表所示。
|
命令 |
説明 |
|
o |
進入編輯模式,光標下面另起一行 |
|
a |
進入編輯模式,光標後一位 |
|
i |
進入編輯模式,光標當前位置 |
|
: |
進入末行模式 |
|
V |
進入可視行模式 |
|
v |
進入可視模式 |
|
^v |
進入可視塊模式 |
|
R |
進入替換模式 |
末行模式常見的命令如表所示。
|
命令 |
説明 |
|
:w |
保存 |
|
:q |
退出 |
|
:wq |
保存並退出 |
|
:w! |
強制保存 |
|
:q! |
不保存強制退出 |
|
:wq! |
強制保存退出 |
|
:set nu |
顯示行號 |
|
:set nonu |
不顯示行號 |
|
:整數 |
跳到該行 |
|
:s/abc/abd |
該行第一個abc替換成abd |
|
:s/abc/abd/g |
該行所有abc替換成abd |
|
:%字符串 |
在文本中從下至上搜索字符串 |
|
:/字符串 |
在文本中從上至下搜索字符串 |
三, 編輯簡單的文檔
用Vim編寫文檔首先要給文檔命名,此處命名為localhost.txt。如果文檔已經創建,則打開;如果文檔不存在,此命令將創建一個文件,如圖所示。
打開文檔後,默認進入命令模式,不能編輯文本,需要切換到編輯模式,按i鍵進入編輯模式,如圖所示。
進入編輯模式後,左下角出現“--插入--”,可隨意輸入文本內容,Vim編輯器不會把文本內容當作命令執行,如圖所示。
在編寫完之後,保存退出。首先按Esc鍵切換到命令模式,然後再輸入“:”,進入末行模式,最後輸入wq,完成保存退出,如圖所示。
保存退出後,使用cat命令就可以查看剛才輸入的文本,如圖所示。
再次進入文檔,可以繼續編輯文件。按鍵盤方向鍵上快速翻出這條命令,如圖所示。
按o鍵進入編輯模式,另起一行並添加內容,如圖所示。
如果此時不保存文件,直接退出,編輯器會拒絕此操作,如圖所示。
在末行模式下輸入“q!”強行退出,如圖所示。
最後再次查看文本,發現並未保存第二次添加內容,只顯示原來的內容,如圖所示。
四,文件時間
回到熟悉的Windows系統,在windows下新建一個文件,保存文件的同時也會保存文件的創建時間、修改時間、訪問時間等,如圖所示。
在Linux系統下,一個文件也有三種時間:訪問時間、修改時間、狀態時間。stat命令可以查看文件的詳細信息,具體如下所示:
[root@localhost ~]# stat /etc/hostname
File: '/etc/hostname'
Size: 6 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 16931194 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:hostname_etc_t:s0
Access: 2019-04-02 09:29:54.065475006 +0800
Modify: 2019-03-30 14:17:48.875787110 +0800
Change: 2019-03-30 14:17:48.912788257 +0800
Birth: -
從輸出結果中可以看到系統保存了三個時間:Access time(訪問時間)、Modify time(狀態時間)、Change time(修改時間)。
在Linux系統中,文件是沒有創建時間的,如果新創建一個文件,它的三個時間都是與創建的時間相同,具體如下所示:
[root@localhost ~]# stat abc.txt
File: 'abc.txt'
Size: 4 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 35505558 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2019-04-08 18:39:49.771126373 +0800
Modify: 2019-04-08 18:39:49.771126373 +0800
Change: 2019-04-08 18:39:49.771126373 +0800
Birth: -
修改時間:文件的內容被最後一次修改的時間,“ls -l”命令顯示出來的文件時間就是這個時間,當使用Vim對文件進行編輯之後保存,它的ctime就會相應的改變。
訪問時間:對文件進行一次讀操作,它的訪問時間就會改變。例如,cat、less等操作,但是state與ls命令對atime是不會有影響的。
狀態時間:當文件的狀態被改變時,狀態時間就會改變,當使用chmod、chown等命令改變文件屬性時,會改變文件的mtime。
以前的RHEL(Red Hat Enterprise Linux)版本,只要讀取文件,就會刷新時間,這種時間的變化專業術語叫“磁盤的IO操作”,就是寫磁盤,訪問一次寫一次。舉例來説,千鋒教育網站有上萬個網頁,如果有一萬個人訪問,訪問一次時間就會刷新一次,最後會導致大量IO操作,這樣的做的積極意義並不大,由此帶來的消極意義卻是明顯的,大大增加了磁盤IO的工作量。
從RHEL6開始atime延遲修改,刷新時間必須滿足下列兩個條件之一:自上次atime修改後已過去86400秒;發生寫操作。這個改變作用是很大的,例如,find命令查看根目錄下5天以內被改過的文件(選取部分查詢內容顯示),具體如下所示:
[root@localhost ~]# find / -mtime -5
Ø 文件類型
前面提到過文件的顏色類別,但通過顏色判斷文件的類型是不一定正確的。Linux系統中文件是沒有擴展名,修改無實際意義的擴展名無法修改文件的本質,具體如下所示:
[root@localhost ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg
a.txt b.txt
[root@localhost ~]# file a.txt
a.txt: ASCII text //是txt文件
[root@localhost ~]# file anaconda-ks.cfg
anaconda-ks.cfg: ASCII text //也是txt文件
[root@localhost ~]# mv a.txt a.jpg //更改文件的擴展名為jpg格式
[root@localhost ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg
a.jpg b.txt
[root@localhost ~]# file a.jpg
a.jpg: ASCII text //依然是txt文件
使用“ls -l”命令查看文件名,看第一個字符,開頭為“-”是普通文件(如文本文件、二進制文件、壓縮文件、圖片等),開頭為“d”的是目錄文件(藍色),具體如下所示:
[root@localhost ~]# ls -l /etc/
total 1348
-rw-r--r--. 1 root root 5090 Nov 5 2016 DIR_COLORS
-rw-r--r--. 1 root root 5725 Nov 5 2016 DIR_COLORS.256color
-rw-r--r--. 1 root root 4669 Nov 5 2016 DIR_COLORS.lightbgcolor
-rw-r--r--. 1 root root 94 Apr 29 2015 GREP_COLORS
-rw-r--r--. 1 root root 842 Nov 6 2016 GeoIP.conf
-rw-r--r--. 1 root root 858 Nov 6 2016 GeoIP.conf.default
drwxr-xr-x. 8 root root 145 Mar 30 12:46 NetworkManager
drwxr-xr-x. 2 root root 92 Mar 30 12:52 PackageKit
drwxr-xr-x. 2 root root 25 Mar 30 12:46 UPower
drwxr-xr-x. 6 root root 103 Mar 30 12:45 X11
drwxr-xr-x. 3 root root 101 Mar 30 12:45 abrt
…………省略部分文件……………
開頭為“b”表示設備文件(塊設備),存儲設備硬盤、U盤、/dev/sda、 /dev/sda1;“c”表示設備文件(字符設備),打印機、終端、/dev/tty1、/dev/zero;“s”表示套接字文件;“p”表示管道文件;“l”表示鏈接文件(淡藍色)。
[root@localhost ~]# ll /dev/sda c
brw-rw----. 1 root disk 8, 0 Apr 2 09:29 /dev/sda
[root@localhost ~]# ll /dev/zero
crw-rw-rw-. 1 root root 1, 5 Apr 2 09:29 /dev/zero
[root@localhost ~]# ll /dev/log
srw-rw-rw-. 1 root root 0 Apr 2 09:29 /dev/log
[root@localhost ~]# ll /run/dmeventd-client
prw-------. 1 root root 0 Apr 2 09:29 /run/dmeventd-client
[root@localhost ~]# ll /etc/grub2.cfg
lrwxrwxrwx. 1 root root 22 Mar 30 12:52 /etc/grub2.cfg
-> ../boot/grub2/grub.cfg
使用file命令查看文件類型,如文本文件、二進制文件、管道文件、設備文件、鏈接文件等,具體如下所示:
[root@localhost ~]# file /etc/hostname
/etc/hostname: ASCII text
[root@localhost ~]# file /dev/sda
/dev/sda: block special
[root@localhost ~]# file /dev/zero
/dev/zero: character special
使用stat命令查看文件的詳細屬性,例如,文件的名稱、大小、權限、atime、ctime、mtime等,具體如下所示:
[root@localhost ~]# stat /etc/hostname
File: '/etc/hostname' //文件名字
Size: 6 //大小 Blocks: 8 //佔塊數 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 16931194 Links: 1
Access: (0644/-rw-r--r--) //權限 Uid: ( 0/ root) //所有者 Gid: ( 0/ root)
Context: system_u:object_r:hostname_etc_t:s0
Access: 2018-04-02 09:29:54.065475006 +0800
Modify: 2018-03-30 14:17:48.875787110 +0800
Change: 2018-03-30 14:17:48.912788257 +0800
Birth: -
文章的最後提醒大家,特別是Linux初學者。前一個月的操作練習要比理論知識更重要。否則中期很容易基礎命令想不起來,高級技術聽不懂跟不上。所以通過上機練習可以考察同學們對知識點的掌握情況,對代碼的熟練程度。配套視頻也可以看博主的主頁課程。謝謝你的耐心觀看。