对文件内容进行操作的命令
上一篇博客介绍的是对文件夹操作的命令,这篇介绍一下对文件内容操作的命令。在 Linux中大部分都是文本文件,系统中提供了多个文件内容查看命令,以满足用户在不同情形下查看文本文件内容的要求。另外,通过grep命令还可以在某个文本文件中找到需要的某部分内容。
1. cat命令——显示文本文件内容
cat(concatenate)命令本来用于连接多个文件的内容,但在实际使用中更多的用于查看文本文件内容。**注意:cat后面不能加目录,只能加文本文件。**cat是应用最为广泛的文本文件内容查看命令,其语法格式为:
cat [选项] 文件名
操作 | 功能 |
---|---|
cat 文件名 | 查看该文件的文件内容 |
cat -n 文件名 | 给显示的内容加上行号 |
[root@localhost ~]# uname
Linux
[root@localhost ~]# uname -a #结果中的3.10.0为内核版本
Linux localhost.localdomain 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
PS: cat命令有个缺陷,就是当显示的文本内容很多时,cat也是全部显示,用户看起来就很麻烦,因此引入more命令。
2. more命令——可换屏/换行的显示文本文件内容
对于很多行的文本文件,用cat命令显示出的内容用于逐行看会很麻烦,因此more命令可以让文件翻页显示或逐行显示。只要内容满一屏,显示自动暂停,按空格键继续显示下一页面;按回车键逐行显示;按q键跳离,适用于阅读长文件。其语法格式为:
more [选项] 文件名
3. less命令——可换屏/换行的显示文本文件内容
less命令和more命令使用功能基本一致,但less命令可以上下翻页,而more命令只能向下翻页。less命令不会自动退出,需要使用q键退出,而less命令可自动退出。
4. head和tail命令——查看文件开头或末尾的部分内容
head和tail命令用于显示文件的局部内容,默认情况下,head显示前10行的内容,tail显示后10行的内容。其语法格式为:
head [选项] 文件名
tail [选项] 文件名
操作 | 功能 |
---|---|
head 文件名 | 显示文件的前10行 |
head -n 文件名 | 显示文件的前n行 |
tail 文件名 | 显示文件的后10行 |
tail -n 文件名 | 显示文件的后n行 |
tail -f 文件名 | 实时显示文件最后面增量内容 |
[root@localhost ~]# tail -5 /etc/passwd
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
tuqiuping:x:1000:1000:tuqiuping:/home/tuqiuping:/bin/bash
zj:x:1001:1001::/home/zj:/bin/bash
PS: tail -f命令主要是为了查看"/var/log/messages"下的内容
5. wc命令——文件内容统计
wc(word count)命令用于统计指定文件中的行数、单词数、字符数。
操作 | 功能 |
---|---|
wc 文件名 | 统计指定文件中的行数、单词数、字符数 |
wc -l 文件名 | 只显示文件的行数 |
[root@localhost ~]# wc /etc/passwd
44 88 2309 /etc/passwd
[root@localhost ~]# wc -l /etc/passwd
44 /etc/passwd
6. echo命令——将引号内容输出或者写入至文本文件
echo命令通常用于输出指定的字符串或者是变量的值。
操作 | 功能 |
---|---|
echo ‘内容’ | 在屏幕上输出内容 |
echo ‘内容’ > 文本文件名 | 将内容写入至文本文件(覆盖形式写入) |
echo ‘内容’ > > 文本文件名 | 将内容追加保存到文件中(末端添加形式写入) |
echo $变量名 | 查看变量的内容 |
[root@localhost ~]# echo 'hello world!'
hello world!
[root@localhost ~]# echo 'hello world' > a.txt
[root@localhost ~]# cat a.txt
hello world
[root@localhost ~]# a=123
[root@localhost ~]# echo $a
123
[root@localhost ~]# b='students'
[root@localhost ~]# echo $b
students
[root@localhost ~]# c=456
[root@localhost ~]# echo $[$a+$c]
579
7. grep命令——查找文件内容
grep命令用于查找并显示文本文件中指定字符串的所有行,通过改命令,可以从杂乱的信息找到所需要的部分。语法格式为:
grep [选项] 查找条件 目标文件
PS: grep命令不支持通配符,而是支持正则表达式。例如符号"^“表示以什么字符开头,符号”$"表示以什么字符结尾。一般查找条件中不含符号时可以不加引号,但是有符号时必须加上引号
操作 | 功能 |
---|---|
grep -n 查找条件 目标文件 | 输出符合查找条件的行,及其行号 |
grep -v 查找条件 目标文件 | 找出不含查找条件的行 |
grep “^$” 目标文件 | 查找目标文件的空白行 |
grep -i 查找条件 目标文件 | 查找时忽略大小写 |
grep -w 查找条件 目标文件 | 精确匹配单词 |
grep -r 查找条件 目标文件 | 递归查找,查找指定目录及其子目录的所有文件中指定的关键字 |
[root@localhost ~]# grep "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# grep "^root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# grep "bash$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
tuqiuping:x:1000:1000:tuqiuping:/home/tuqiuping:/bin/bash
zj:x:1001:1001::/home/zj:/bin/bash
[root@localhost ~]# grep -n root /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# grep -v root /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
libstoragemgmt:x:998:996:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
colord:x:997:995:User for colord:/var/lib/colord:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
saned:x:996:993:SANE scanner daemon user:/usr/share/sane:/sbin/nologin
saslauth:x:995:76:Saslauthd user:/run/saslauthd:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
setroubleshoot:x:994:991::/var/lib/setroubleshoot:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
chrony:x:993:988::/var/lib/chrony:/sbin/nologin
unbound:x:992:987:Unbound DNS resolver:/etc/unbound:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
geoclue:x:991:985:User for geoclue:/var/lib/geoclue:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
gluster:x:990:984:GlusterFS daemons:/run/gluster:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
gnome-initial-setup:x:989:983::/run/gnome-initial-setup/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
tuqiuping:x:1000:1000:tuqiuping:/home/tuqiuping:/bin/bash
zj:x:1001:1001::/home/zj:/bin/bash
[root@localhost ~]# echo "the num is 10" > test.txt
[root@localhost ~]# echo "number" >> test.txt
[root@localhost ~]# grep num test.txt
the num is 10
number
[root@localhost ~]# grep -w num test.txt
the num is 10
[root@localhost ~]# grep -r pass /etc/ssh
/etc/ssh/sshd_config:# To disable tunneled clear text passwords, change to no here!
/etc/ssh/sshd_config:# Change to no to disable s/key passwords
/etc/ssh/sshd_config:# PAM authentication via ChallengeResponseAuthentication may bypass
/etc/ssh/sshd_config:# the setting of "PermitRootLogin without-password".
8. diff命令——文件内容对比
diff命令用于比较多个文本之间的差异,这在系统安全防范中极为重要。语法格式为:
diff 文件1 文件2
[root@localhost ~]# cp .bashrc .bashrc.bak
[root@localhost ~]# ls -a
. .bash_profile .esd_auth .tcshrc 视频
.. .bashrc .ICEauthority test 图片
aaa.txt .bashrc.bak initial-setup-ks.cfg test1 文档
anaconda-ks.cfg .cache inittab.bak test.txt 下载
a.txt .config .local .xauthDqXb3t 音乐
.bash_history .cshrc .mozilla 公共 桌面
.bash_logout .dbus rc.d 模板
[root@localhost ~]# diff .bashrc .bashrc.bak
[root@localhost ~]# echo "hello" >> .bashrc.bak
[root@localhost ~]# diff .bashrc .bashrc.bak
12a13
> hello
PS:显示结果中,字母"a"、“d”、“c"分别表示添加、删除及修改操作。其中,以”<“开始的行属于文件1,以”>"开始的行属于文件2。所以以上结果就表示.bashrc的12行增加了,增加内容为hello