2.6 文本文件編輯命令

2023-01-03 11:44 更新

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

1.cat命令

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

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

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

    [root@linuxprobe ~]# cat -n initial-setup-ks.cfg 
         1    #version=RHEL7
         2    # X Window System configuration information
         3    xconfig  --startxonboot
         4    
         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
    ………………省略部分輸出信息………………

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

2.more命令

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

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

    [root@linuxprobe ~]# more initial-setup-ks.cfg 
        #version=RHEL7
        # X Window System configuration information
        xconfig  --startxonboot

        
        # License agreement
        eula --agreed
        # System authorization information
        auth --enableshadow --passalgo=sha512
        # Use CDROM installation media
        cdrom
        # Run the Setup Agent on first boot
        firstboot --enable
        # Keyboard layouts
        keyboard --vckeymap=us --xlayouts='us'
        # System language
        lang en_US.UTF-8

        
        ignoredisk --only-use=sda
        # Network information
        network  --bootproto=dhcp --device=eno16777728 --onboot=off --ipv6=auto
        network  --bootproto=dhcp --hostname=linuxprobe.com
        --More--(43%)

3.head 命令

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

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

    [root@linuxprobe ~]# head -n 20  initial-setup-ks.cfg 
        #version=RHEL7
        # X Window System configuration information
        xconfig  --startxonboot

        
        # License agreement
        eula --agreed
        # System authorization information
        auth --enableshadow --passalgo=sha512
        # Use CDROM installation media
        cdrom
        # Run the Setup Agent on first boot
        firstboot --enable
        # Keyboard layouts
        keyboard --vckeymap=us --xlayouts='us'
        # System language
        lang en_US.UTF-8

        
        ignoredisk --only-use=sda
        # Network information
        network  --bootproto=dhcp --device=eno16777728 --onboot=off --ipv6=auto
        [root@linuxprobe ~]#

4.tail 命令

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

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

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

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

5.tr 命令

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

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

    [root@linuxprobe ~]# cat anaconda-ks.cfg | tr [a-z] [A-Z]
    #VERSION=RHEL7
    # SYSTEM AUTHORIZATION INFORMATION
    AUTH --ENABLESHADOW --PASSALGO=SHA512

    
    # USE CDROM INSTALLATION MEDIA
    CDROM
    # RUN THE SETUP AGENT ON FIRST BOOT
    FIRSTBOOT --ENABLE
    IGNOREDISK --ONLY-USE=SDA
    # KEYBOARD LAYOUTS
    KEYBOARD --VCKEYMAP=US --XLAYOUTS='US'
    # SYSTEM LANGUAGE
    LANG EN_US.UTF-8

    
    # NETWORK INFORMATION
    NETWORK --BOOTPROTO=DHCP --DEVICE=ENO16777728 --ONBOOT=OFF --IPV6=AUTO
    NETWORK --HOSTNAME=LOCALHOST.LOCALDOMAIN
    # ROOT PASSWORD
    ROOTPW --ISCRYPTED $6$PDJJF42G8C6PL069$II.PX/YFAQPO0ENW2PA7MOMKJLYOAE2ZJMZ2UZJ7BH3UO4OWTR1.WK/HXZ3XIGMZGJPCS/MGPYSSOI8HPCT8B/
    # SYSTEM TIMEZONE
    TIMEZONE AMERICA/NEW_YORK --ISUTC
    USER --NAME=LINUXPROBE --PASSWORD=$6$A9V3INSTNBWEIR7D$JEGFYWBCDOOOKJ9SODECCDO.ZLF4OSH2AZ2SS2R05B6LZ2A0V2K.RJWSBALL2FEKQVGF640OA/TOK6J.7GUTO/ --ISCRYPTED --GECOS="LINUXPROBE"
    # X WINDOW SYSTEM CONFIGURATION INFORMATION
    XCONFIG --STARTXONBOOT
    # SYSTEM BOOTLOADER CONFIGURATION
    BOOTLOADER --LOCATION=MBR --BOOT-DRIVE=SDA
    AUTOPART --TYPE=LVM
    # PARTITION CLEARING INFORMATION
    CLEARPART --NONE --INITLABEL 

    
    %PACKAGES
    @BASE
    @CORE
    @DESKTOP-DEBUGGING
    @DIAL-UP
    @FONTS
    @GNOME-DESKTOP
    @GUEST-AGENTS
    @GUEST-DESKTOP-AGENTS
    @INPUT-METHODS
    @INTERNET-BROWSER
    @MULTIMEDIA
    @PRINT-CLIENT
    @X11

    
    %END

6.wc 命令

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

每次我在課堂上講到這個(gè)命令時(shí),總有同學(xué)會(huì)聯(lián)想到一種公共設(shè)施,其實(shí)這兩者毫無(wú)關(guān)聯(lián)。Linux 系統(tǒng)中的 wc 命令用于統(tǒng)計(jì)文本的行數(shù)、字?jǐn)?shù)、字節(jié)數(shù)等。如果為了方便自己記住這個(gè)命令的作用,也可以聯(lián)想到上廁所時(shí)好無(wú)聊,無(wú)聊到數(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)計(jì)當(dāng)前系統(tǒng)中有多少個(gè)用戶,可以使用下面的命令來(lái)進(jìn)行查詢,是不是很神奇:

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

7.stat命令

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

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

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

8.cut 命令

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

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

    [root@linuxprobe ~]# head -n 2 /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    [root@linuxprobe ~]# cut -d: -f1 /etc/passwd
    root
    bin
    daemon
    adm
    lp
    sync
    shutdown
    halt
    mail
    operator
    games
    ftp
    nobody
    dbus
    polkitd
    unbound
    colord
    usbmuxd
    avahi
    avahi-autoipd
    libstoragemgmt
    saslauth
    qemu
    rpc
    rpcuser
    nfsnobody
    rtkit
    radvd
    ntp
    chrony
    abrt
    pulse
    gdm
    gnome-initial-setup
    postfix
    sshd
    tcpdump
    linuxprobe

9.diff 命令

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

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

    [root@linuxprobe ~]# cat diff_A.txt
    Welcome to linuxprobe.com
    Red Hat certified
    Free Linux Lessons
    Professional guidance
    Linux Course
    [root@linuxprobe ~]# cat diff_B.txt
    Welcome tooo linuxprobe.com

    
    Red Hat certified
    Free Linux LeSSonS
    ////////.....////////
    Professional guidance
    Linux Course

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

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

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

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

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)