2.6 文本文件編輯命令

2023-01-03 11:44 更新

通過前面幾個小節(jié)的學(xué)習(xí),讀者應(yīng)該基本掌握了切換工作目錄及對文件的管理方法。 Linux 系統(tǒng)中“一切都是文件”,而對服務(wù)程序進行配置自然也就是編輯程序的配置文件。如果不能熟練地查閱系統(tǒng)或服務(wù)的配置文件,那以后工作時可就真的要尷尬了。本節(jié)將講解幾條用于查看文本文件內(nèi)容的文本文件編輯命令。至于編輯器使用起來比較復(fù)雜,因此將放到第 4 章與 Shell 腳本內(nèi)容一起講解。

1.cat命令

cat 命令用于查看純文本文件(內(nèi)容較少的),格式為“cat [選項] [文件]”。

Linux 系統(tǒng)中有多個用于查看文本內(nèi)容的命令,每個命令都有自己的特點,比如這個 cat 命令就是用于查看內(nèi)容較少的純文本文件的。cat 這個命令也很好記,因為 cat 在英語中是“貓”的意思,小貓咪是不是給您一種嬌小、可愛的感覺呢?

如果在查看文本內(nèi)容時還想順便顯示行號的話,不妨在cat命令后面追加一個-n參數(shù):

  1. [root@linuxprobe ~]# cat -n initial-setup-ks.cfg
  2. 1 #version=RHEL7
  3. 2 # X Window System configuration information
  4. 3 xconfig --startxonboot
  5. 4
  6. 5 # License agreement
  7. 6 eula --agreed
  8. 7 # System authorization information
  9. 8 auth --enableshadow --passalgo=sha512
  10. 9 # Use CDROM installation media
  11. 10 cdrom
  12. 11 # Run the Setup Agent on first boot
  13. 12 firstboot --enable
  14. 13 # Keyboard layouts
  15. 14 keyboard --vckeymap=us --xlayouts='us'
  16. 15 # System language
  17. 16 lang en_US.UTF-8
  18. ………………省略部分輸出信息………………

cat命令詳解:https://www.linuxcool.com/cat

2.more命令

more 命令用于查看純文本文件(內(nèi)容較多的),格式為“more [選項]文件”。

如果需要閱讀長篇小說或者非常長的配置文件,那么“小貓咪”可就真的不適合了。因為一旦使用 cat 命令閱讀長篇的文本內(nèi)容,信息就會在屏幕上快速翻滾,導(dǎo)致自己還沒有來得及看到,內(nèi)容就已經(jīng)翻篇了。因此對于長篇的文本內(nèi)容,推薦使用 more 命令來查看。more 命令會在最下面使用百分比的形式來提示您已經(jīng)閱讀了多少內(nèi)容。您還可以使用空格鍵或回車鍵向下翻頁:

  1. [root@linuxprobe ~]# more initial-setup-ks.cfg
  2. #version=RHEL7
  3. # X Window System configuration information
  4. xconfig --startxonboot
  5. # License agreement
  6. eula --agreed
  7. # System authorization information
  8. auth --enableshadow --passalgo=sha512
  9. # Use CDROM installation media
  10. cdrom
  11. # Run the Setup Agent on first boot
  12. firstboot --enable
  13. # Keyboard layouts
  14. keyboard --vckeymap=us --xlayouts='us'
  15. # System language
  16. lang en_US.UTF-8
  17. ignoredisk --only-use=sda
  18. # Network information
  19. network --bootproto=dhcp --device=eno16777728 --onboot=off --ipv6=auto
  20. network --bootproto=dhcp --hostname=linuxprobe.com
  21. --More--(43%)

3.head 命令

head 命令用于查看純文本文檔的前N行,格式為“head [選項] [文件]”。

在閱讀文本內(nèi)容時,誰也難以保證會按照從頭到尾的順序往下看完整個文件。如果只想查看文本中前 20 行的內(nèi)容,該怎么辦呢?head 命令可以派上用場了:

  1. [root@linuxprobe ~]# head -n 20 initial-setup-ks.cfg
  2. #version=RHEL7
  3. # X Window System configuration information
  4. xconfig --startxonboot
  5. # License agreement
  6. eula --agreed
  7. # System authorization information
  8. auth --enableshadow --passalgo=sha512
  9. # Use CDROM installation media
  10. cdrom
  11. # Run the Setup Agent on first boot
  12. firstboot --enable
  13. # Keyboard layouts
  14. keyboard --vckeymap=us --xlayouts='us'
  15. # System language
  16. lang en_US.UTF-8
  17. ignoredisk --only-use=sda
  18. # Network information
  19. network --bootproto=dhcp --device=eno16777728 --onboot=off --ipv6=auto
  20. [root@linuxprobe ~]#

4.tail 命令

tail 命令用于查看純文本文檔的后N行或持續(xù)刷新內(nèi)容,格式為“tail [選項] [文件]”。

我們可能還會遇到另外一種情況,比如需要查看文本內(nèi)容的最后 20 行,這時就需要用到tail 命令了。tail 命令的操作方法與 head 命令非常相似,只需要執(zhí)行“tail -n 20 文件名”命令就可以達到這樣的效果。tail 命令最強悍的功能是可以持續(xù)刷新一個文件的內(nèi)容,當(dāng)想要實時查看最新日志文件時,這特別有用,此時的命令格式為“tail -f 文件名”:

  1. [root@linuxprobe ~]# tail -f /var/log/messages
  2. May 4 07:56:38 localhost gnome-session: Window manager warning: Log level 16: STACK_OP_ADD: window 0x1e00001 already in stack
  3. May 4 07:56:38 localhost gnome-session: Window manager warning: Log level 16: STACK_OP_ADD: window 0x1e00001 already in stack
  4. May 4 07:56:38 localhost vmusr[12982]: [ warning] [Gtk] gtk_disable_setlocale() must be called before gtk_init()
  5. May 4 07:56:50 localhost systemd-logind: Removed session c1.
  6. Aug 1 01:05:31 localhost systemd: Time has been changed
  7. Aug 1 01:05:31 localhost systemd: Started LSB: Bring up/down networking.
  8. Aug 1 01:08:56 localhost dbus-daemon: dbus[1124]: [system] Activating service name='com.redhat.SubscriptionManager' (using servicehelper)
  9. Aug 1 01:08:56 localhost dbus[1124]: [system] Activating service name='com.redhat.SubscriptionManager' (using servicehelper)
  10. Aug 1 01:08:57 localhost dbus-daemon: dbus[1124]: [system] Successfully activated service 'com.redhat.SubscriptionManager'
  11. Aug 1 01:08:57 localhost dbus[1124]: [system] Successfully activated service 'com.redhat.SubscriptionManager'

注意,如果想要結(jié)束這個命令回到控制臺窗口,可以使用之前提到的Ctrl+C快捷鍵進行退出。

5.tr 命令

tr命令用于替換文本文件中的字符,格式為“tr [原始字符] [目標(biāo)字符]”。

在很多時候,我們想要快速地替換文本中的一些詞匯,又或者把整個文本內(nèi)容都進行替換,如果進行手工替換,難免工作量太大,尤其是需要處理大批量的內(nèi)容時,進行手工替換更是不現(xiàn)實。這時,就可以先使用 cat 命令讀取待處理的文本,然后通過管道符(詳見第3章)把這些文本內(nèi)容傳遞給tr命令進行替換操作即可。例如,把某個文本內(nèi)容中的英文全部替換為大寫:

  1. [root@linuxprobe ~]# cat anaconda-ks.cfg | tr [a-z] [A-Z]
  2. #VERSION=RHEL7
  3. # SYSTEM AUTHORIZATION INFORMATION
  4. AUTH --ENABLESHADOW --PASSALGO=SHA512
  5. # USE CDROM INSTALLATION MEDIA
  6. CDROM
  7. # RUN THE SETUP AGENT ON FIRST BOOT
  8. FIRSTBOOT --ENABLE
  9. IGNOREDISK --ONLY-USE=SDA
  10. # KEYBOARD LAYOUTS
  11. KEYBOARD --VCKEYMAP=US --XLAYOUTS='US'
  12. # SYSTEM LANGUAGE
  13. LANG EN_US.UTF-8
  14. # NETWORK INFORMATION
  15. NETWORK --BOOTPROTO=DHCP --DEVICE=ENO16777728 --ONBOOT=OFF --IPV6=AUTO
  16. NETWORK --HOSTNAME=LOCALHOST.LOCALDOMAIN
  17. # ROOT PASSWORD
  18. ROOTPW --ISCRYPTED $6$PDJJF42G8C6PL069$II.PX/YFAQPO0ENW2PA7MOMKJLYOAE2ZJMZ2UZJ7BH3UO4OWTR1.WK/HXZ3XIGMZGJPCS/MGPYSSOI8HPCT8B/
  19. # SYSTEM TIMEZONE
  20. TIMEZONE AMERICA/NEW_YORK --ISUTC
  21. USER --NAME=LINUXPROBE --PASSWORD=$6$A9V3INSTNBWEIR7D$JEGFYWBCDOOOKJ9SODECCDO.ZLF4OSH2AZ2SS2R05B6LZ2A0V2K.RJWSBALL2FEKQVGF640OA/TOK6J.7GUTO/ --ISCRYPTED --GECOS="LINUXPROBE"
  22. # X WINDOW SYSTEM CONFIGURATION INFORMATION
  23. XCONFIG --STARTXONBOOT
  24. # SYSTEM BOOTLOADER CONFIGURATION
  25. BOOTLOADER --LOCATION=MBR --BOOT-DRIVE=SDA
  26. AUTOPART --TYPE=LVM
  27. # PARTITION CLEARING INFORMATION
  28. CLEARPART --NONE --INITLABEL
  29. %PACKAGES
  30. @BASE
  31. @CORE
  32. @DESKTOP-DEBUGGING
  33. @DIAL-UP
  34. @FONTS
  35. @GNOME-DESKTOP
  36. @GUEST-AGENTS
  37. @GUEST-DESKTOP-AGENTS
  38. @INPUT-METHODS
  39. @INTERNET-BROWSER
  40. @MULTIMEDIA
  41. @PRINT-CLIENT
  42. @X11
  43. %END

6.wc 命令

wc 命令用于統(tǒng)計指定文本的行數(shù)、字數(shù)、字節(jié)數(shù),格式為“wc [參數(shù)] 文本”。

每次我在課堂上講到這個命令時,總有同學(xué)會聯(lián)想到一種公共設(shè)施,其實這兩者毫無關(guān)聯(lián)。Linux 系統(tǒng)中的 wc 命令用于統(tǒng)計文本的行數(shù)、字數(shù)、字節(jié)數(shù)等。如果為了方便自己記住這個命令的作用,也可以聯(lián)想到上廁所時好無聊,無聊到數(shù)完了手中的如廁讀物上有多少行字。wc 的參數(shù)以及相應(yīng)的作用如表 2-10 所示。

表2-10 wc 的參數(shù)以及作用

參數(shù) 作用
-l 只顯示行數(shù)
-w 只顯示單詞數(shù)
-c 只顯示字節(jié)數(shù)

在 Linux 系統(tǒng)中,passwd 是用于保存系統(tǒng)賬戶信息的文件,要統(tǒng)計當(dāng)前系統(tǒng)中有多少個用戶,可以使用下面的命令來進行查詢,是不是很神奇:

  1. [root@linuxprobe ~]# wc -l /etc/passwd
  2. 38 /etc/passwd

7.stat命令

stat 命令用于查看文件的具體存儲信息和時間等信息,格式為“stat 文件名稱”。

stat 命令可以用于查看文件的存儲信息和時間等信息,命令 stat anaconda-ks.cfg 會顯示出文件的三種時間狀態(tài)(已加粗):Access、ModifyChange。這三種時間的區(qū)別將在下面的 touch 命令中詳細詳解:

  1. [root@linuxprobe ~]# stat anaconda-ks.cfg
  2. File: a(chǎn)naconda-ks.cfg
  3. Size: 1213 Blocks: 8 IO Block: 4096 regular file
  4. Device: fd00h/64768d Inode: 68912908 Links: 1
  5. Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
  6. Context: system_u:object_r:admin_home_t:s0
  7. Access: 2017-07-14 01:46:18.721255659 -0400
  8. Modify: 2017-05-04 15:44:36.916027026 -0400
  9. Change: 2017-05-04 15:44:36.916027026 -0400
  10. Birth: -

8.cut 命令

cut 命令用于按“”提取文本字符,格式為“cut [參數(shù)] 文本”。

在 Linux 系統(tǒng)中,如何準(zhǔn)確地提取出最想要的數(shù)據(jù),這也是我們應(yīng)該重點學(xué)習(xí)的內(nèi)容。一般而言,按基于“”的方式來提取數(shù)據(jù)是比較簡單的,只需要設(shè)置好要搜索的關(guān)鍵詞即可。但是如果按列搜索,不僅要使用 -f 參數(shù)來設(shè)置需要看的列數(shù),還需要使用 -d 參數(shù)來設(shè)置間隔符號。passwd 在保存用戶數(shù)據(jù)信息時,用戶信息的每一項值之間是采用冒號(:)來間隔的,接下來我們使用下述命令嘗試提取出 passwd 文件中的用戶名信息,即提取以冒號(:)為間隔符號的第一列內(nèi)容:

  1. [root@linuxprobe ~]# head -n 2 /etc/passwd
  2. root:x:0:0:root:/root:/bin/bash
  3. bin:x:1:1:bin:/bin:/sbin/nologin
  4. [root@linuxprobe ~]# cut -d: -f1 /etc/passwd
  5. root
  6. bin
  7. daemon
  8. adm
  9. lp
  10. sync
  11. shutdown
  12. halt
  13. mail
  14. operator
  15. games
  16. ftp
  17. nobody
  18. dbus
  19. polkitd
  20. unbound
  21. colord
  22. usbmuxd
  23. avahi
  24. avahi-autoipd
  25. libstoragemgmt
  26. saslauth
  27. qemu
  28. rpc
  29. rpcuser
  30. nfsnobody
  31. rtkit
  32. radvd
  33. ntp
  34. chrony
  35. abrt
  36. pulse
  37. gdm
  38. gnome-initial-setup
  39. postfix
  40. sshd
  41. tcpdump
  42. linuxprobe

9.diff 命令

diff 命令用于比較多個文本文件的差異,格式為“diff [參數(shù)] 文件”。

在使用 diff 命令時,不僅可以使用 --brief 參數(shù)來確認兩個文件是否不同,還可以使用 -c 參數(shù)來詳細比較出多個文件的差異之處,這絕對是判斷文件是否被篡改的有力神器。例如,先使用 cat 命令分別查看 diff_A.txtdiff_B.txt 文件的內(nèi)容,然后進行比較:

  1. [root@linuxprobe ~]# cat diff_A.txt
  2. Welcome to linuxprobe.com
  3. Red Hat certified
  4. Free Linux Lessons
  5. Professional guidance
  6. Linux Course
  7. [root@linuxprobe ~]# cat diff_B.txt
  8. Welcome tooo linuxprobe.com
  9. Red Hat certified
  10. Free Linux LeSSonS
  11. ////////.....////////
  12. Professional guidance
  13. Linux Course

這兩個文件需要事先創(chuàng)建好!可以直接使用桌面端在home文件夾下直接創(chuàng)建(推薦),也可以在命令行條件下使用vim來創(chuàng)建

接下來使用 diff --brief 命令顯示比較后的結(jié)果,判斷文件是否相同:

  1. [root@linuxprobe ~]# diff --brief diff_A.txt diff_B.txt
  2. Files diff_A.txt and diff_B.txt differ

最后使用帶有-c參數(shù)的diff命令來描述文件內(nèi)容具體的不同:

  1. [root@linuxprobe ~]# diff -c diff_A.txt diff_B.txt
  2. *** diff_A.txt 2017-08-30 18:07:45.230864626 +0800
  3. --- diff_B.txt 2017-08-30 18:08:52.203860389 +0800
  4. ***************
  5. *** 1,5 ****
  6. ! Welcome to linuxprobe.com
  7. Red Hat certified
  8. ! Free Linux Lessons
  9. Professional guidance
  10. Linux Course
  11. --- 1,7 ----
  12. ! Welcome tooo linuxprobe.com
  13. !
  14. Red Hat certified
  15. ! Free Linux LeSSonS
  16. ! ////////.....////////
  17. Professional guidance
  18. Linux Course
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號