Linux基本文件操作
前言
在这里我们将会开始学习Linux的基本文件操作,从现在开始我们要放弃之前习惯的Windows、Mac OS下习惯的鼠标操作GUI界面,我们的所有操作都是在终端下通过命令行进行的。一、Linux文件的特点
Linux和Windows有一个特别大的区别,就是Linux系统中没有盘符的概念,在Windows中,我们的文件系统可能会被放在各个盘符下,比如C盘、D盘、E盘等等。
但在Linux中,并没有这么多盘,只有一个根目录:/
在这个根目录下面又很多的文件夹,比如boot、bin、root、var等等。
二、Linux命令的格式
Linux的命令格式大致如下:
命令名 -命令选项 命令参数
首先是命令名,之后是‘-’加上命令选项,最后是这个命令的参数。
比如,我想精确查看根目录下etc文件中的所有文件,则:
ls -l /etc
其中,ls是查看命令(list),-l是可选选项,意为详细信息,/etc是这个命令操作的对象,也就是根目录下的etc文件夹。
指令选项都是“-”加上命令选项的格式,同一个命令如果有多个选项,可以写在一起。
比如 rm的两个可选选项 -r 和 -f,如果都要选择,可以直接写成 -rf 。
三、绝对路径和相对路径
首先我们来了解绝对路径,绝对路径就好比一个完整的地址。
比如:
中华人民共和国上海市东方明珠。
这个没有歧义,就是一个非常绝对的地址。
那么相对地址就好比这样:
村东头的剪发王师傅家
这句话,外人听不懂,只有村里人才能听懂。所以这是一个相对地址。那么在Linux文件系统中,也存在着绝对地址和相对地址的概念。
绝对地址就好比如此:
/var/www/html/index.html
这就是指根目录-var文件夹-www文件夹-html文件夹下的index.html文件。如果输入绝对地址,那么无论你当前在哪个目录下进行工作,都可以找到。
那么相对地址就好比:
index.html
这样只有目前的工作目录为/var/www/html时,才能找到index.html,就好像你是村里人才知道王师傅家在哪,否则不知道,在Linux中就表示为找不到文件index.html(前提是目前你的工作目录下没有另一个叫index.html的文件)。
四、文件管理操作命令
1.pwd:查看当前的工作目录
pwd的全称就是“print work directory”,打印当前的工作目录,这个操作很简单,也没有其他多余的操作,在终端中直接输入pwd即可。
pwd
/root
在这里第一行是我在终端中输入的pwd指令,第二行返回我现在正在工作的目录:/root
2.ls:列出目录
ls也就是“list”的意思,ls可以打印出目标参数中所有文件和文件夹的名字以及后缀。比如我先看一下在我的服务器上,根目录下var文件夹有什么文件:
ls /var
adm cache crash db empty games gopher kerberos lib local lock
log mail nis opt preserve run spool tmp www yp
ls /var是我输入的指令,可以看到这个文件夹下面打印出来的都是在var文件夹下面的文件夹(二级文件夹)。
ls -l 查看详细信息。加上-l的参数之后可以看到每个文件、文件夹的详细信息。比如:
ls -l /var/www
total 8
drwxr-xr-x 2 root root 4096 Apr 2 2020 cgi-bin
drwxr-xr-x 7 root root 4096 Oct 20 08:11 html
虽然输出的很多,其实就是两个文件夹,一个叫cgi-bin,另一个叫html,至于前面写的是什么,以后会讲解。
ls -a 查看隐藏文件
ls -a /var
. adm crash empty gopher lib lock mail opt run tmp www
.. cache db games kerberos local log nis preserve spool .updated yp
这里的. 和 … 都是隐藏的。
3.cd:切换目录
cd的全称就是“change directory”这个命令也比较简单,也很常用,可以说在文件管理中ls和cd是最常用的两个指令。
比如目前我打pwd发现我在/root,我要切换到/var/www/html (其实是apache的网页文件夹),就会这么操作:
pwd
/root
cd /var/www/html
(没有输出)
pwd
/var/www/html
ls
1.mp3 2.mp3 3.mp3 css fonts index.html js LICENSE.txt README.txt sass
可以忽略最后一个输出(这是我服务器的网页的文件)
4.touch:创建文件
touch命令就是在当前目录(如果不给出指定目录)或者给定的目录(绝对地址)下创建文件。
比如在当前文件夹下创建一个1.txt文件:
[root@kanna ~] ls
Kanna.c
[root@kanna ~] touch 1.txt
[root@kanna ~] ls
1.txt Kanna.c
可以看到一开始文件夹内只有一个Kanna.c文件,在touch 1.txt文件之后,新增了一个名为1.txt的文本文档。
如果用绝对地址,可以这样:
[root@kanna ~] ls /home/
1.txt
[root@kanna ~] ls /home/
1.txt
[root@kanna ~] touch /home/2.txt
[root@kanna ~] ls /home/
1.txt 2.txt
原本home文件夹下面只有1.txt,经过操作我们创建了2.txt。
5.mkdir:创建文件夹指令
mkdir即为:make directory,创建目录。
他和touch用法相近,就是创建的是文件夹而不是文件。
[root@kanna ~] ls
[root@kanna ~] mkdir AAA
[root@kanna ~] ls
AAA
我们在当前的文件夹下面创建了一个叫AAA的文件夹。
可以用 mkdir -p 来进行多级文件夹创建:
[root@kanna ~] mkdir -p BBB/CCC
[root@kanna ~] ls
AAA BBB
[root@kanna ~] ls BBB/
CCC
可以看到我们在当前目录下建立了一个BBB文件夹,在BBB文件夹下面也建立了一个CCC文件夹。
如果我们不用-p选项,那么就会报错:
[root@kanna ~] mkdir EEE/FFF
mkdir: cannot create directory ‘EEE/FFF’: No such file or directory
6.cp:文件拷贝
cp大家都能想到就是copy的简写,他的使用方法就是:
cp 源文件 目标位置
比如:
[root@kanna ~] touch copy.txt
[root@kanna ~] ls
AAA BBB copy.txt
[root@kanna ~] cp copy.txt /home
[root@kanna ~] ls /home
copy.txt
[root@kanna ~] ls
AAA BBB copy.txt
(注意上面相对地址和绝对地址的用法)
这里我们在root目录下面创建了一个叫做copy.txt的文件,复制到了根目录下的home文件夹。
同时,可以用 -r 选项对文件夹进行操作:
[root@kanna ~] cp -r AAA /home
[root@kanna ~] ls /home
AAA copy.txt
这里AAA是个文件夹,如果不用-r选项,那么就会报错。
7.mv:移动文件
mv就是move的简写,这个命令和上面的cp就是剪切和复制的区别。
例子:
[root@kanna ~] touch m.txt
[root@kanna ~] ls
AAA BBB copy.txt m.txt
[root@kanna ~] mv m.txt /home
[root@kanna ~] ls
AAA BBB copy.txt
[root@kanna ~] ls /home
AAA copy.txt m.txt
我们把创建的m.txt移动到home文件夹后,在root文件夹下的m.txt就消失了,和cp指令不同。
mv对文件夹操作不用加 -r ,mv命令没有-r的操作选项。
[root@kanna ~] mv BBB /home
[root@kanna ~] ls
AAA copy.txt
[root@kanna ~] ls /home
AAA BBB copy.txt m.txt
8.rm:删除文件
rm就是remove的意思。在CentOS中一般使用选项 -f ,这样再删除的时候就不用每个文件都要问一遍是否要删除。
如果要删除文件夹,就要用 -r 。
比如要删除一个文档:
[root@kanna ~] ls
AAA copy.txt
[root@kanna ~] rm copy.txt
rm: remove regular empty file ‘copy.txt’? yes
[root@kanna ~] ls
AAA
我们可以看到,如果不选择任何选项,那么在删除的时候系统会询问你是否要删除,询问后面的yes是我输入进去的。
[root@kanna ~] touch 1.txt
[root@kanna ~] ls
1.txt AAA
[root@kanna ~] rm -f 1.txt
[root@kanna ~] ls
AAA
加上 -f 之后就不会再询问了
如果要删除文件夹,就用 -r,和-f一起可以组成 -rf ,一般大家都习惯删除都加一个 -rf。
[root@kanna ~] ls
AAA
[root@kanna ~] rm -rf AAA
[root@kanna ~] ls
[root@kanna ~]
至此,一般的remove操作就是这样了。
接下来介绍一个remove的其他使用方法:
rm也经常和通配符 ‘*’ 和占位符 ‘?’ 一起用。
通配符和占位符
通配符 ‘*’
通配符*,可以代表一切符号,任意长度。
比如我创建了 test1.txt 到 test5.txt 五个txt文本文档。如果都想删除,那么按照输入文件名称的方法就要输入好几遍。如果我用通配符,就可以:
rm -rf *.txt
这个操作是把这个文件夹里面的所有txt文件全部删掉,因为通配符*代表一切符号,任意长度。
另一个例子,如果我创建了 file1 到 file5 这五个文件,我只想删除这五个文件,并且这个文件夹里只有这5个文件是以字母 f 开头的可以用通配符这么做:
rm -rf f*
这里的 f* 便表示所有 f 开头的文件或文件夹。*也可以不占位置,比如下面的例子:
[root@kanna home] ls
[root@kanna home] touch f1
[root@kanna home] touch f
[root@kanna home] ls
f f1
[root@kanna home] rm -rf f*
[root@kanna home] ls
[root@kanna home]
在这里 f 和 f1 都被删除了。
占位符 ‘?’
占位符 ‘?’ 和通配符 ‘*’ 比较像,只是占位符 ‘?’ 表示任意字符,一个字符长度。
比如在上面通配符的例子中的第一个删除例子,我们可以把删除的指令改为:
rm -rf test?.txt
因为?只占一个字符的位置,所以可以用这个办法进行删除。如果只输入?.txt,那么系统只会寻找只有一个字符为名字的txt文件进行删除。
对于第二个例子:
[root@kanna home] ls
[root@kanna home] touch f.txt
[root@kanna home] touch f1.txt
[root@kanna home] ls
f1.txt f.txt
[root@kanna home] rm -rf f?.txt
[root@kanna home] ls
f.txt
我们可以看到,只有f1会被删除,所以占位符?不可以不占字符位置。
了解了 * 和 ? 之后,我们可以试试这个指令 (在公用服务器上千万别随便用这个指令,自己在虚拟机里玩玩就得了)
可以猜猜这个指令是在做什么:
rm -rf /*
总结
本文是对Linux下对文件的操作指令,是学习Linux指令的第一步,也是日后在Linux系统上最常用的指令。