linux基本指令之文件操作
前言
这次博客的主要目的就是要解决如何快速查看或查找文件,以及讲解文件的一些属性。本次博客还是以基本指令为主来理解linux对文件的操作。
linux下输入输出流的理解
在linux中,我们要对文件进行输入输出时,一般会怎么做呢?
可以通过printf命令,(这个是linux系统命令,不是c语言的函数),来把字符串打印在linux终端上,那么它是怎么做到的?
可以通过外设来理解,我们要输入就必须要键盘,要看见输出就必须要有显示器。而在c语言中默认有文件被打开,因为在系统中外设也是文件。
extern FILE* stdin
extern FILE* stdout
extern FILE* stderr
这几个文件分别是标准输入,标准输出,标准错误。
在linux同样也存在,这三个流,它们是系统默认打开的流。
所以我们在把内容通过键盘输入,屏幕(默认是终端)输出时,要有这几个设备文件打开。所以这里再一次证明:linux下一切皆文件。
当然,终端也是一个文件:这个在重定向后会实践一波。
重定向
使用重定向可以改变默认输入输出流的方向。
直接来
输出重定向
使用echo指令可以把字符串输出到终端上。它默认是写入终端的。通过重定向可以把内容写入文件中:
可以把内容重定向写入test文件中,通过cat指令把文件内容写出。
也可以通过把内容重定向写入不存在的文件中从而创建文件。
这样也可以创建一个文件。
如果我们对一个已经存在的有内容的文件再次重定向,那么就会把原来的内容清空,并且重新写入
追加重定向
注意在追加是会自动添加换行的。
输入重定向
输入重定向就是改变从默认位置读入信息。
使用cat可以进行输入重定向
这两种其实不一样,上面的是输入重定向。
接下来利用终端也是一个文件来进行终端间的重定向:
在/dev/pts中有一个字符文件,它就代表终端,以c开头的文件就是字符文件,此时有两个一个是0
一个是1.
在一个0终端下个1输出内容,把内容重定向给终端1,由此终端其实也是一个文件。
当然我们可以使用代码来验证这一点.
·在vim里面编辑这些代码,使用gcc编译。
这样在就可以在终端0写代码,在终端1中显示,这也是重定向。也肯定了终端就是文件。
文件的基本分类
linux下文件可以分为以下几类:
普通文件:以-开头,可以后很多的后缀,a.txt a.c a.cpp a.mp3 a.mp4 a.npj……
后缀无法作为linux区分文件的标准,所以普通文件的运用是最广的。但是编译器要看是不是.c文件,不然编译不过。所以后缀名要写对。
目录文件:以d开头,是一个目录。
这些全部都是目录文件。
字符文件:以c开头,键盘,显示器,终端都是字符文件,输入的数据都有顺序性。
块设备文件:以b开头磁盘
这里是一个磁盘,相当于windos系统的c盘d盘。不要乱搞,否者就相当于c盘的信息被改,那么整个系统可能会崩。
连接文件:以l开头
一般在库里面,以l开头,主要是用于编译时把各个.o文件连接起来。
管道文件:以p开头
这里的管道文件暂时不做讲解。
日志的查看与查找
介绍日志的作用:一般而言对于一个系统来说会出错所以说这时候就需要查看日志来判断错误在哪?这里还是以Ubuntu为例去查看日志文件。
在 Ubuntu 中,不同类型的日志文件位于不同的位置:
系统日志:
/var/log/syslog
:包含系统的一般日志信息,包括内核消息、系统启动和关闭信息等。/var/log/auth.log
:记录用户认证相关的日志,如登录尝试、密码错误等。/var/log/kern.log
:内核日志,记录内核产生的消息。
一般就这几个,可以都看看,就是还看不懂,哈哈哈哈哈。
只需要cat /var/log/xxxxxx就可以查看不同的日志。
接下来来看看命令:
more
使用s或者回车往下看,并且不回显。
只能一直往下看,很low,一般不用。按下q退出。
这里按下 /+字符串 可以查找内容。
先使用脚本创建文本文件:
然后more log.txt输入:
回车查找hellook
less
支持鼠标上下移动,也支持键盘上下键移动。就可以看到之前的信息。
这里同样也支持查找:也是/ +字符串
输入/ hellook即可。
按下n可以查找下一个目标:
tail和head
查看文件的最后或者最前行
head+文件 查看文件前10行内容 tail+文件 查看文件后10行内容
head -1 文件 查看文件的前1行内容 tail -1 文件 查看文件的最后一行内容
举例,查看前2行内容:
查看最后2行内容:
那么如果要看中间部分?-假设是查看100~110行
算一算:这里的文件一共1000行,从1000到1递减
如果要看第100~110行:那么先算第110行是什么数字,因为第1行是1000 ,那么第100行是1000-99=901,那么第110行就是1000-109=891,这么一看对照一下是对的。
那么这个代码还可以简化:通过管道来简化,比如要读第601到610行
解释一下管道文件:
这里是head先取出了610行内容存入了管道中,再使用tail取出文件最后10行,再举几个例子
都是管道的用法,类似于充当一个临时变量。
总结一波:
1.一般查看日志,这种大型文件使用less好,more不太好用。
2.使用cat查看小型的文件。
3.可以使用head tail查看文件的任意范围行内容。