- Linux就該這么學
- 劉遄
- 2495字
- 2019-01-05 05:54:01
2.6 文本文件編輯命令
通過前面幾個小節(jié)的學習,讀者應該基本掌握了切換工作目錄及對文件的管理方法。Linux系統(tǒng)中“一切都是文件”,而對服務程序進行配置自然也就是編輯程序的配置文件。如果不能熟練地查閱系統(tǒng)或服務的配置文件,那以后工作時可就真的要尷尬了。本節(jié)將講解幾條用于查看文本文件內容的命令。至于編輯器使用起來比較復雜,因此將放到第4章與Shell腳本內容一起講解。
1.cat命令
cat命令用于查看純文本文件(內容較少的),格式為“cat [選項] [文件]”。
Linux系統(tǒng)中有多個用于查看文本內容的命令,每個命令都有自己的特點,比如這個cat命令就是用于查看內容較少的純文本文件的。cat這個命令也很好記,因為cat在英語中是“貓”的意思,小貓咪是不是給您一種嬌小、可愛的感覺呢?
如果在查看文本內容時還想順便顯示行號的話,不妨在cat命令后面追加一個-n參數:
[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 ………………省略部分輸出信息………………
2.more命令
more命令用于查看純文本文件(內容較多的),格式為“more [選項]文件”。
如果需要閱讀長篇小說或者非常長的配置文件,那么“小貓咪”可就真的不適合了。因為一旦使用cat命令閱讀長篇的文本內容,信息就會在屏幕上快速翻滾,導致自己還沒有來得及看到,內容就已經翻篇了。因此對于長篇的文本內容,推薦使用more命令來查看。more命令會在最下面使用百分比的形式來提示您已經閱讀了多少內容。您還可以使用空格鍵或回車鍵向下翻頁:
[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 [選項] [文件]”。
在閱讀文本內容時,誰也難以保證會按照從頭到尾的順序往下看完整個文件。如果只想查看文本中前20行的內容,該怎么辦呢?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 ~]#
4.tail命令
tail命令用于查看純文本文檔的后N行或持續(xù)刷新內容,格式為“tail [選項] [文件]”。
我們可能還會遇到另外一種情況,比如需要查看文本內容的最后20行,這時就需要用到tail命令了。tail命令的操作方法與head命令非常相似,只需要執(zhí)行“tail -n 20文件名”命令就可以達到這樣的效果。tail命令最強悍的功能是可以持續(xù)刷新一個文件的內容,當想要實時查看最新日志文件時,這特別有用,此時的命令格式為“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'
5.tr命令
tr命令用于替換文本文件中的字符,格式為“tr [原始字符] [目標字符]”。
在很多時候,我們想要快速地替換文本中的一些詞匯,又或者把整個文本內容都進行替換,如果進行手工替換,難免工作量太大,尤其是需要處理大批量的內容時,進行手工替換更是不現實。這時,就可以先使用cat命令讀取待處理的文本,然后通過管道符(詳見第3章)把這些文本內容傳遞給tr命令進行替換操作即可。例如,把某個文本內容中的英文全部替換為大寫:
[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/YFAQPO0ENW2PA7MOMKJLYOAE2ZJMZ2UZJ7 BH3UO4OWTR1.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)計指定文本的行數、字數、字節(jié)數,格式為“wc [參數]文本”。
每次我在課堂上講到這個命令時,總有同學會聯想到一種公共設施,其實這兩者毫無關聯。Linux系統(tǒng)中的wc命令用于統(tǒng)計文本的行數、字數、字節(jié)數等。如果為了方便自己記住這個命令的作用,也可以聯想到上廁所時好無聊,無聊到數完了手中的如廁讀物上有多少行字。
wc的參數以及相應的作用如表2-10所示。
表2-10 wc的參數以及作用

在Linux系統(tǒng)中,passwd是用于保存系統(tǒng)賬戶信息的文件,要統(tǒng)計當前系統(tǒng)中有多少個用戶,可以使用下面的命令來進行查詢,是不是很神奇:
[root@linuxprobe ~]# wc -l /etc/passwd 38 /etc/passwd
7.stat命令
stat命令用于查看文件的具體存儲信息和時間等信息,格式為“stat文件名稱”。
stat命令可以用于查看文件的存儲信息和時間等信息,命令stat anaconda-ks.cfg會顯示出文件的三種時間狀態(tài)(已加粗):Access、Modify、Change。這三種時間的區(qū)別將在下面的touch命令中詳細詳解:
[root@linuxprobe ~]# stat anaconda-ks.cfg File: ‘anaconda-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 [參數]文本”。
在Linux系統(tǒng)中,如何準確地提取出最想要的數據,這也是我們應該重點學習的內容。一般而言,按基于“行”的方式來提取數據是比較簡單的,只需要設置好要搜索的關鍵詞即可。但是如果按列搜索,不僅要使用-f參數來設置需要看的列數,還需要使用-d參數來設置間隔符號。passwd在保存用戶數據信息時,用戶信息的每一項值之間是采用冒號來間隔的,接下來我們使用下述命令嘗試提取出passwd文件中的用戶名信息,即提取以冒號(:)為間隔符號的第一列內容:
[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命令用于比較多個文本文件的差異,格式為“diff [參數]文件”。
在使用diff命令時,不僅可以使用--brief參數來確認兩個文件是否不同,還可以使用-c參數來詳細比較出多個文件的差異之處,這絕對是判斷文件是否被篡改的有力神器。例如,先使用cat命令分別查看diff_A.txt和diff_B.txt文件的內容,然后進行比較:
[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
接下來使用diff --brief命令顯示比較后的結果,判斷文件是否相同:
[root@linuxprobe ~]# diff --brief diff_A.txt diff_B.txt Files diff_A.txt and diff_B.txt differ
最后使用帶有-c參數的diff命令來描述文件內容具體的不同:
[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
- Linux網絡管理與配置(第2版)
- Containerization with LXC
- WordPress Mobile Web Development:Beginner's Guide
- Extending Puppet
- 嵌入式Linux驅動程序和系統(tǒng)開發(fā)實例精講
- Heroku Cloud Application Development
- Hadoop Real-World Solutions Cookbook
- 統(tǒng)信UOS應用開發(fā)進階教程
- Office 365 User Guide
- OpenHarmony開發(fā)與實踐:基于紅莓RK2206開發(fā)板
- 大規(guī)模Linux集群架構最佳實踐:如何管理上千臺服務器
- Serverless Architectures with Kubernetes
- Getting Started with Raspberry Pi Zero
- Getting Started with Citrix XenApp 6.5
- Microsoft Azure Administrator:Exam Guide AZ-103