Linux基本文件操作【读写】

  • 前言
  • 文件阅读操作
    • cat指令查看全部内容
    • head、tail查看开头、结尾
    • more翻页方式查看文件
    • grep对文件进行关键字查找
  • 文件改写操作
    • 重定向
    • gedit文件编辑器
    • vi、vim文件编辑器
      • vim的模式切换
      • vim的命令模式
      • vim的编辑模式
      • vim的可视化模式
  • 总结

前言

之前讨论过如何对文件和文件夹进行增删和移动的操作,这里我们来讨论一下如何对文件进行读写操作。

文件阅读操作

cat指令查看全部内容

cat指令是一个专门用来查看,也是一个只能用来查看文件的操作。
比如我们在我的服务器上面写一个C语言源文件,代码如下:

#include <stdio.h>

int main(){
	printf("This is the first C program on Kanna's server.\n");
	return 0;
}

我们可以直接用一下形式直接查看文件内容
cat 文件名
以上面的C语言文件为例:

[root@kanna ~] ls
Kanna.c
[root@kanna ~] cat Kanna.c 
#include <stdio.h>

int main(){
	printf("This is the first C program on Kanna's server.\n");
	return 0;
}
[root@kanna ~]

head、tail查看开头、结尾

顾名思义,这两个指令就是用来看文件的开头和结尾的。
以这个txt文件为例:
1.txt:

1111111111
2222222222
3333333333
4444444444
5555555555
6666666666
7777777777
8888888888
9999999999
1010101010

这个文件有很多行,一般来讲如果我们只想看开头几行或者结尾几行就可以用head和tail这两个指令。
这两个指令一般后面都要加上 -数字 以选择查看开头\结尾几行。
例子如下:

[root@kanna ~] ls
1.txt  Kanna.c
[root@kanna ~] head -3 1.txt 
1111111111
2222222222
3333333333
[root@kanna ~] tail -2 1.txt 
9999999999
1010101010
[root@kanna ~] 

例子中我们用head函数和tail函数看到了开头三行和结尾三行。

more翻页方式查看文件

当我们要查看的文件行数特别多的时候就可以用more指令来进行查看,这个查看的方式支持在终端中对文件进行翻页。
举例:

[root@kanna ~] more passwd.txt 
root:x:0:0:root:/root:/bin/bash
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
operator:x:11:0:operator:/root:/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:997:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
syslog:x:996:994::/home/syslog:/bin/false
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
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
--More--(59%)

中间这一大堆的东西可以先不管,我们只看输出的最后一行,这里写着只在终端显示了这个文件的前59%,在这里我们按下回车可以一行一行向下继续阅读,按下空格可以直接切换到下一页。

grep对文件进行关键字查找

比如我有一个这个名字为alpha.txt的文件:

apple
banan
coconut
dog
elephant
frog
google
hello
ice
juice
kill
lemon
mango
name
orange
pen
quit
run
start
tall
universe
view
want
x-ray
yellow
zero

如果我想查找有or的单词,我可以:

[root@kanna ~] grep or alpha.txt 
orange

在Xshell(我用来连接服务器的终端)中的显示是这样的:

文件改写操作

重定向

之所以把重定向放在这个位置,是因为重定向本身也涉及到关于文件的写入操作,重定向不像听起来那么深奥,其实重定向就是把本来应该在终端输出的信息输出到了文件中,比如在上面用more翻页性查看一个长文档时,例子中的passwd.txt就是我运用cat指令查看在根目录下etc文件夹在中的passwd文件进行重定向到这个txt文档中的。

这个操作有点像C++的文件流操作,本来用cout输出到输出端口的字符输出到文件中。

比如我们用pwd指令:

pwd

结果是这样的:

我们创建一个名为workd的txt文本文档,把pwd的结果重定向到这个文档中,语法如下:

pwd > workd.txt


我们可以看到最后查看workd.txt文档的时候,这个文档中显示的是刚才pwd的结果。这就是重定向之后的结果。

重定向一般在要生成比较长的文档的时候经常用,比如用objdump来反汇编程序的时候经常用,以上面我们的Kanna.c文件为例,我们先把他编译,然后用objdump反汇编,把结果重定向到txt文档中:

这个时候我们再查看Kanna.txt,由于反汇编的输出特别多,所以我们用more来查看

more Kanna.txt


可以看到这么多才显示了2%,如果要是在终端输出查看会非常不方便。这就让重定向操作起到了作用。

gedit文件编辑器

gedit文件编辑器经常在有GUI的Linux系统上进行编辑,这个有点像Windows系统中的记事本。他们是什么文件都可以打开的,虽然有些文件打开是乱码或者是机器码。在虚拟机中运行带有GUI可视化图形操作界面的CentOS使用gedit对文件进行编辑大致如此:

vi、vim文件编辑器

但是我们再服务器上面,基本用的Linux系统都是没有GUI的,因为服务器本身不需要GUI,服务器上面的系统都是不带有GUI的,只有终端。输入命令。所以在终端中,我们只能用vi、vim进行操作。推荐使用vim,这个是带颜色的,便于区分。
比如我们用vim来查看我们的Kanna.c

这个是用vim查看Kanna.c的情况。

vim的模式切换

当我们刚刚用vim进行文件读写操作的时候,我们发现我们虽然可以移动终端的光标,但是我们并不能输入字符,这是因为我们现在还是在vim的命令模式(command mode),在这个状态下,只能进行文件的保存、退出操作。

如上图,我们需要按下 i 键(insert),切换到编辑模式(edit mode)
也可以通过按下a、o等进入编辑模式,不同按键的区别请大家自己去尝试。

vim的命令模式

在命令模式下,我们可以通过输入一个分号 : 来进行命令的输入。按下分号后发现终端的底部也会打出一个分号,这个时候我们再分号后面输入我们需要的操作,就可以进行相关的操作。

  1. :q 即为quit。输入:q之后直接关闭目前正在查看的文件。
  2. :q! 这是强制退出,在没有保存的情况下可以进行强制退出,退出之前进行的操作不会被保存。
  3. :w 即为 write,保存
  4. :wq 即为 write and quit,保存并退出。
  5. :set nu 每一行显示行号
  6. :set list 显示控制字符
  7. :set nonu取消显示行号
  8. :set nolist取消显示控制字符
    接下来是不需要分号的操作:
  9. yy 实现复制一行的符号(怎么选取复制在后面提到)
  10. p 和上面的yy联合使用,进行粘贴
  11. 数字+yy复制N行。比如3yy复制三行
  12. dd 即为 delete的缩写,删除一整行。
  13. 同理,数字+dd即为删除N行。比如3dd删除三行
  14. u即为undo,撤销操作
  15. d长按 可以实现退格(backspace)操作
  16. 按下键盘上的0和$实现跨越到行首和行尾
  17. gg G跨越到页首和页尾
  18. 3G 进入第三行,3可以换成任意数字
  19. /string (n N 可以循环) 查找字符,按下n选择下一个 (string即为查找的字符)
  20. n,m s/string1/string2/g 在n到m行中,把所有string1全部替换为string2,g是全局的意思,s就是switch的意思。

vim的编辑模式

在编辑模式下,文件就像在记事本中或者在gedit中打开的一样,我们可以通过方向键对光标进行操作,如果没有方向键可以先按下ESC退出到命令模式,然后再命令模式的状态下用H,J,K,L四个键对光标进行移动,H向左,J向上,K向下,L向右。选取到需要的地方再按下i切回编辑模式

vim的可视化模式

由于我们再终端中不能操作鼠标,就会使得我们想相对的选取部分文字会很麻烦,在vim中可以用可视化模式进行这个操作。
在命令模式中按下键盘上的v键即可进入可视化模式。之后可以通过光标向鼠标一样进行选取,按下yy复制、dd删除。

总结

本文介绍了一些关于Linux系统中如何进行文件读写的操作,接下来将会介绍用户管理和组管理相关的操作。

更多推荐

走进Linux服务器之一:Linux操作基础3——Linux基本文件操作(读写)