文件内容显示
前面已经说过了文件的创建、操作等命令及方法,除去这些以外,最重要的其实还是文件的查看,如果每个文件的内容都看不到,那么这个文件就没了意义。在Windows的平台上,不同的文件类型使用不同的编辑器或查看器打开就可以,在Linux的平台上,也是这样,每种不同的文件,都会有其特定的查看方式,本节中主要讲解文本文档的查看。查看文件主要使用的cat(Concatenate)命令,还有一些其他命令与之搭配实现不同的查看模式,例如more、less、grep等。
cat命令
和前面讲的touch命令等命令类似的,cat命令本来的作用也并非是用于文件内容的查看,而是用于文件的拼接,即可以将两个或多个文件进行拼接形成同一个文件,并且将拼接结果输出到终端中进行显示,与重定向符号配合,可以实现多个文件的拼接并将拼接后的内容输出到新的文件中。
#首先创建两个内容并不相同的问价作为测试
os@DESKTOP-2DHQBVS:~$ echo "test1 content" > test1
os@DESKTOP-2DHQBVS:~$ echo "test2 content" > test2
#使用cat命令可以直接查看文件的内容
os@DESKTOP-2DHQBVS:~$ cat test1
test1 content
#cat命令后如果添加两个文件,则会将两个文件的内容按顺序拼接后输出到终端中
os@DESKTOP-2DHQBVS:~$ cat test1 test2
test1 content
test2 content
#使用cat命令及重定向符号可以将两个文件进行拼接并创建第三个文件进行保存
os@DESKTOP-2DHQBVS:~$ cat test1 test2 > test3
#查看第三个文件的内容,为上述test1、test2两个的内容拼接
os@DESKTOP-2DHQBVS:~$ cat test3
test1 content
test2 content
查看文件时,如果希望显示行号,可以使用cat命令的-n选项进行显示。
#输出的内容会自动在每一行内容前加上行号,方便阅读与确定位置
os@DESKTOP-2DHQBVS:~$ cat -n test3
1 test1 content
2 test2 content
当文件内容较少时,使用cat命令显示文件简单、快捷,能够在终端一屏中显示所有的内容,多出的几行能够通过鼠标滚动来显示。然而当文件内容太长,或在纯命令行界面中,超过一屏的内容后,前面的内容将不会显示,只会显示最后的几行内容,无法查看全部的内容,而此时鼠标也是无法使用的,显然这是不合适的,所以有了一些专门用来查看文件内容的命令,比如more命令。
more命令
顾名思义,more,更过的意思,亦即显示更多的东西。more命令一般用来显示内容较长的文件,提供了翻页等选项,能够方便的显示所有内容。
#以bashrc文件为例,该文件内容较长,能够很好的演示more命令的用法
os@DESKTOP-2DHQBVS:~$ more .bashrc
#执行more命令后,会进入more命令的运行环境,此时最下边会显示文件显示的百分比。
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth
# append to the history file, don't overwrite it
shopt -s histappend
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar
--More--(21%)
进入more命令的运行环境后,就可以通过快捷键的方式进行文件浏览,常用的快捷键有如下几个:
- 空格:(space)向下翻一页
- B:(back)向上翻一页
- 回车:(enter)向下滚动一行
- “/”:斜线,斜线后输入字符串,能够在文档中查找该字符串并显示
- H:(help)显示帮助信息
- Q:(quit)退出当前环境,除了使用Q外,当文件阅读结束,more命令也会自动退出
除了显示文件内容外,也可以使用管道符“|”将上一个命令的输出作为more命令的输入,让more命令来进行分页显示。
#使用ls命令查看/bin目录下的文件和文件夹
#由于内容较多,显示时需要分为多屏显示,此时就可以使用more命令进行分屏
os@DESKTOP-2DHQBVS:~$ ls -l /bin | more
total 15984
-rwxr-xr-x 1 root root 1037528 May 16 2017 bash
-rwxr-xr-x 1 root root 520992 Jun 16 2017 btrfs
-rwxr-xr-x 1 root root 249464 Jun 16 2017 btrfs-calc-size
lrwxrwxrwx 1 root root 5 Jun 16 2017 btrfsck -> btrfs
-rwxr-xr-x 1 root root 278376 Jun 16 2017 btrfs-convert
-rwxr-xr-x 1 root root 249464 Jun 16 2017 btrfs-debug-tree
-rwxr-xr-x 1 root root 245368 Jun 16 2017 btrfs-find-root
-rwxr-xr-x 1 root root 270136 Jun 16 2017 btrfs-image
-rwxr-xr-x 1 root root 249464 Jun 16 2017 btrfs-map-logical
-rwxr-xr-x 1 root root 245368 Jun 16 2017 btrfs-select-super
。。。。。。
--More--
上述示例中,需要注意的是,对于一般文件,最后会显示该文件显示内容的百分比,而使用管道进行内容输出时,并不会出现内容的百分比,而只显示“--More--”字样,这是由于more命令对于管道符传递过来的内容,只能进行下翻页,不能进行上翻页造成的。所以,虽然相对于cat命令来说,more命令已经足够强大,但是在某些情况下,仍然有其局限性,而less命令补足了这些问短板。
less命令
与more命令相同,是less也是专门用来进行文件查看的命令,基本上常用的快捷键与more命令都是相同的。
而与more命令相比,less命令更加的灵活,由于采用了缓存的技术,并不是一次性全部将文件内容读取到内存中,所有在读取大文件时,速度也比more命令要快。
#同样以bashrc文件为例,使用less命令进行打开
os@DESKTOP-2DHQBVS:~$ less .bashrc
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
。。。。。。
:
上述示例中最后一行并不像more命令一样显示文件显示的百分比,而是显示的“:”,提示用户,此时可以按快捷键进行换页等,常用的快捷键和more命令完全相同,空格向下翻页、回车滚动一行等。除了这些以外,还有一些其他的操作也比较实用。
- y:向上滚动一行
- d:向下滚动半屏
- u:向上滚动半屏
- →,右箭头:文档整体左移,显示文档右侧的隐藏内容,多用于一行文字较长,显示不完全的情况。
- ←,左箭头,与右箭头相反
需要注意的是,比more命令更加实用的一点,在使用管道符将内容传递到less命令后,同样可以使用上述所有的命令,而不是只能向下滚动显示。而且less命令即使显示到了结尾,也不会自动退出。
head、tail命令
head命令只能够显示文件指定的前几行或前几个字符,tail则是后面的几行内容,通过两个命令的组合,可以灵活的查看文件中任意位置的内容。
#显示bashrc文件前5行的内容,此时使用的是-n选项
os@DESKTOP-2DHQBVS:~$ head -n 5 .bashrc
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything
上述示例中,-n 后面跟的是行数,5代表显示前五行的内容,如果没有指定该参数,则默认显示前十行的内容,如果指定为负数,如-5,则除最后5行不显示外,其他内容都会显示。
#使用-c选项则是显示指定数量的字符数,比如示例中显示前15个字符
#由于前15个字符中并没有换行符,所以可以看到,命令输入提示紧跟在输出的信息后面,而不是自动切换到下一行显示
os@DESKTOP-2DHQBVS:~$ head -c 15 .bashrc
# ~/.bashrc: exos@DESKTOP-2DHQBVS:~$
使tail的命令使用方法与head基本相同。
#显示文件最后五行的内容
os@DESKTOP-2DHQBVS:~$ tail -n 5 .bashrc
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
#显示第115行至最后的内容
os@DESKTOP-2DHQBVS:~$ tail -n +115 .bashrc
. /etc/bash_completion
fi
fi
上述示例中,需要注意正负号的用法。
#head和tail命令组合实现查看任意位置的内容
os@DESKTOP-2DHQBVS:~$ head -n 50 .bashrc | tail -n 5
#force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48
上述示例为显示第46-50行的内容,其中使用head命令显示文件的前50行内容,之后将内容使用管道传递给tail命令,tail命令显示最后的5行内容,实现了显示46-50行的内容。