Linux中所有的东西都是以文件的形式进行表现,比如我插个U盘,都需要挂载到文件系统上面去,对挂载的文件夹进行操作映射到对U盘的操作。
这篇博客就对文件做一些记录。
Linux中以根目录/
为起点,依次往下,类似于一棵树状的系统。
我们刚登陆树莓派的时候进入控制台会出现pi@主机名
情况,此时输入pwd
会输出当前所在目录。一般树莓派刚登陆系统所在的目录为/home/pi
。这里表示根目录下的home
文件下的pi
文件。
涉及到路径最常见的就是修改路径情况,下面是一些常见用例及含义:
cd
指令 即chdir库函数的缩写,改变路径的意思。我们常用它来切换目录。常见用法如:
cd /etc
cd ..
前者是进入到/etc
目录下,后者表示进入到当前目录的上一级目录。
稍微复杂一点的用例:
现假设/home/pi
目录下存在一个可执行文件test
,home目录下还有一个pi1
文件夹
(1)我当前在/
目录下,想执行test文件。
cd /home/pi
./test
(2)我在pi1
文件夹下,想执行test文件
第一种方式与上面一样
第二种方式:
cd …/pi
./test
对于文件的操作大致就是,新建、删除、移动、复制等。下面进行阐述:
文件的新建使用touch
命令。
例如:touch test.txt
表示在当前的操作目录新建一个test.txt文件,这里新建文件的时候需要带上文件的后缀名即类型名。
衍生到目录的操作,新建一个目录;即新建一个文件夹的操作,使用mkdir
例如:mkdir Test
表示在当前的操作目录新建一个名为Test的文件夹。
文件的删除使用rm
命令
例如:rm test.txt
表示在当前操作目录删除test.txt文件。
衍生到目录(文件夹)的操作,那就是rmdir
例如:rmdir Test
表示在当前操作目录删除Test目录,这里假设Test为空目录,如果要删除非空目录,需要在rmdir
指令后添加选项-f
文件的移动使用的是mv
指令
例如:mv test.txt /home/pi/test.txt
这里表示把当前目录的test.txt文件移动到/home/pi
目录下,并取名为test.txt。
这里涉及到取名,其实mv
指令也可以用来重命名。
例如:mv test.txt TEST.txt
把当前目录的test.txt
文件重命名为TEST.txt
文件。
文件的复制使用的是cp命令
例如:cp test.txt /home/pi/test.txt
这里表示把当前目录的test.txt文件复制到/home/pi
目录下,并取名为test.txt。
例如:cp test.txt TEST.txt
把当前目录的test.txt
文件复制一份到当前目录下名为TEST.txt
文件,后者内容和前者一模一样。
有时候我们会出现不知道文件在哪的情况,在windows系统中打开资源管理器,右上角会有一个搜索按钮进行输入,就可以在当前目录进行搜索。
在linux中搜索使用的指令是find
基本用法为:find + path + 表达式
其中path
为查找的路径,后面的表达式则为主操作和运算符构成。
例如:find / -name "*.txt"
打印从根目录往下的所有后缀为txt的文件,-name
表示对名称进行查找,*.txt
中的*
是通配符,表示所有任意长度的字符串。
上面是常见的用法,具体的其他高级用法参见find的文档手册。
相比于上面的find指令,还有一个查找的命令是locate
。
两者的区别
在于:find是实时查找,locate是从数据库查找。
文件系统的信息提前存于一个数据库,locate命令在这个数据库中查找文件。
可以用下面的命令来更新文件系统信息的数据库:sudo updatedb
locate的查找相比于find要简单很多。
例如:locate test.txt
查找名为test.txt的文件。
例如:locate -i t*t.txt
查找以t开头t结尾的txt文件。
上面都是一些基本指令,当然了还有很多指令我这里都没整理到,比如打包压缩解压之类的,这个我后期打算开博客新写一篇关于指令的相关,指令这里暂时先写这么多了。
链接分为硬链接
和软链接
,两者本质上还有是些区别的,下面进行阐述。
一个文件a如果归属于A目录,那么A目录就会建立一个指向a文件的硬链接。
如果a归属于多个目录,即共享状态。假设a归属于ABCD四个目录,那么a的硬链接个数就为4。
当文件a有硬链接,即硬链接个数不为0时,linux系统是无法删除文件a的,即使在A目录把a删除了,那也只是表明A目录中关于a的硬链接断开了;只有当a的硬链接个数变为0之后,a才会被删除。
断开硬链接的命令如下:unlink a
断开当前目录下a的硬链接,即硬链接个数-1
。
建立硬链接命令:ln
例如:我在A目录下进行操作,往B目录中添加a的硬链接,在B中的a文件取名为a1实现共享。
指令为:ln a /B/a1
这里a1实际上和a是同一个文件,只是名字不同;对a1的所有操作都是对a操作。
同一文件的多个硬链接,会破坏树状的文件系统。安全系数大打折扣,因此一般多用软链接。软链接通俗一点的理解就是快捷方式
我删快捷方式,那么源文件还在。
我删源文件,不影响快捷方式的存在,只不过在打开的时候会报错,提示找不到。
所以软链接其实是只存在一个源文件,外发出去很多快捷方式,快捷方式是保存源文件的目录地址,但是在linux中软链接本质上是一个文件,它的文件类型是symbolic link。在这个文件中,包含有链接指向的文件的绝对路径。当读写该文件时,Linux会根据软链接中的绝对路径把读写操作导向软链接所指向的文件。
查看文件是否是软链接文件可以使用file
命令进行操作。
例如:file test-link.txt
结果大致为:test-link.txt:symbolic link to 绝对路径