通過前面幾個小節(jié)的學(xué)習(xí),讀者應(yīng)該基本掌握了切換工作目錄及對文件的管理方法。 Linux 系統(tǒng)中“一切都是文件”,而對服務(wù)程序進行配置自然也就是編輯程序的配置文件。如果不能熟練地查閱系統(tǒng)或服務(wù)的配置文件,那以后工作時可就真的要尷尬了。本節(jié)將講解幾條用于查看文本文件內(nèi)容的文本文件編輯命令。至于編輯器使用起來比較復(fù)雜,因此將放到第 4 章與 Shell 腳本內(nèi)容一起講解。
cat 命令用于查看純文本文件(內(nèi)容較少的),格式為“cat [選項] [文件]
”。
Linux 系統(tǒng)中有多個用于查看文本內(nèi)容的命令,每個命令都有自己的特點,比如這個 cat
命令就是用于查看內(nèi)容較少的純文本文件的。cat
這個命令也很好記,因為 cat
在英語中是“貓”的意思,小貓咪是不是給您一種嬌小、可愛的感覺呢?
如果在查看文本內(nèi)容時還想順便顯示行號的話,不妨在cat命令后面追加一個-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
more
命令用于查看純文本文件(內(nèi)容較多的),格式為“more [選項]文件
”。
如果需要閱讀長篇小說或者非常長的配置文件,那么“小貓咪”可就真的不適合了。因為一旦使用 cat
命令閱讀長篇的文本內(nèi)容,信息就會在屏幕上快速翻滾,導(dǎo)致自己還沒有來得及看到,內(nèi)容就已經(jīng)翻篇了。因此對于長篇的文本內(nèi)容,推薦使用 more
命令來查看。more
命令會在最下面使用百分比的形式來提示您已經(jīng)閱讀了多少內(nèi)容。您還可以使用空格鍵或回車鍵向下翻頁:
[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%)
head
命令用于查看純文本文檔的前N行,格式為“head [選項] [文件]
”。
在閱讀文本內(nèi)容時,誰也難以保證會按照從頭到尾的順序往下看完整個文件。如果只想查看文本中前 20 行的內(nèi)容,該怎么辦呢?head
命令可以派上用場了:
[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 ~]#
tail
命令用于查看純文本文檔的后N行或持續(xù)刷新內(nèi)容,格式為“tail [選項] [文件]
”。
我們可能還會遇到另外一種情況,比如需要查看文本內(nèi)容的最后 20 行,這時就需要用到tail
命令了。tail
命令的操作方法與 head
命令非常相似,只需要執(zhí)行“tail -n 20 文件名
”命令就可以達到這樣的效果。tail
命令最強悍的功能是可以持續(xù)刷新一個文件的內(nèi)容,當(dāng)想要實時查看最新日志文件時,這特別有用,此時的命令格式為“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é)束這個命令回到控制臺窗口,可以使用之前提到的Ctrl+C快捷鍵進行退出。
tr
命令用于替換文本文件中的字符,格式為“tr [原始字符] [目標(biāo)字符]
”。
在很多時候,我們想要快速地替換文本中的一些詞匯,又或者把整個文本內(nèi)容都進行替換,如果進行手工替換,難免工作量太大,尤其是需要處理大批量的內(nèi)容時,進行手工替換更是不現(xiàn)實。這時,就可以先使用 cat
命令讀取待處理的文本,然后通過管道符(詳見第3章)把這些文本內(nèi)容傳遞給tr命令進行替換操作即可。例如,把某個文本內(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
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)中有多少個用戶,可以使用下面的命令來進行查詢,是不是很神奇:
[root@linuxprobe ~]# wc -l /etc/passwd
38 /etc/passwd
stat
命令用于查看文件的具體存儲信息和時間等信息,格式為“stat 文件名稱
”。
stat
命令可以用于查看文件的存儲信息和時間等信息,命令 stat anaconda-ks.cfg
會顯示出文件的三種時間狀態(tài)(已加粗):Access
、Modify
、Change
。這三種時間的區(qū)別將在下面的 touch
命令中詳細詳解:
[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: -
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)容:
[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
diff
命令用于比較多個文本文件的差異,格式為“diff [參數(shù)] 文件
”。
在使用 diff
命令時,不僅可以使用 --brief
參數(shù)來確認兩個文件是否不同,還可以使用 -c
參數(shù)來詳細比較出多個文件的差異之處,這絕對是判斷文件是否被篡改的有力神器。例如,先使用 cat
命令分別查看 diff_A.txt
和diff_B.txt
文件的內(nèi)容,然后進行比較:
[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
這兩個文件需要事先創(chuàng)建好!可以直接使用桌面端在home文件夾下直接創(chuàng)建(推薦),也可以在命令行條件下使用vim來創(chuàng)建
接下來使用 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命令來描述文件內(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
更多建議: