计算机中最重要的数据都存在我们的文件中,所以计算机的指令大部分也都是和文件打交道,比如创建新文件,删除文件,更新文件或者移动文件等等。这章我们就来聊聊如何在Ubuntu中使用指令来操作文件。
Linux文件系统
在了解如何操作文件之前,我们先要了解一下文件在 Linux 操作系统中是如何被储存的。Linux文件系统类似树状结构,所有的文件和目录都被组织成以一个根节点开始的倒置的结构:
文件系统的最顶层是由根目录开始的,系统使用 / 来表示根目录。在根目录之下的既可以是目录,也可以是文件,而每一个目录中又可以包含子目录文件。如此反复就可以构成一个庞大的文件系统。
默认情况下,我们如果使用pwd,会发现我们所在的位置是/home/enoch/,那如果我是使用 ls /,则会发现根目录的内容:
在Linux文件系统中有两个特殊的目录,一个用户所在的工作目录,也叫当前目录,可以使用一个点 . 来表示;另一个是当前目录的上一级目录,也叫父目录,可以使用两个点 .. 来表示,这个在我们后面操作文件夹的时候会具体介绍。
具体文件夹解析
这些文件都有什么用呢?我们来简单了解一下每个文件夹的基础作用
系统启动必须
- /boot:存放的启动Linux 时使用的内核文件,包括连接文件以及镜像文件。
- /etc:存放所有的系统需要的配置文件和子目录列表,更改目录下的文件可能会导致系统不能启动。
- /lib:存放基本代码库(比如c++库),其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
- /sys: 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中
指令集合
- /bin:存放着最常用的程序和指令
- /sbin:只有系统管理员能使用的程序和指令。
外部文件管理
- /dev :Device(设备)的缩写, 存放的是Linux的外部设备。(注意:在Linux中访问设备和访问文件的方式是相同的。)
- /media:类windows的其他设备,例如U盘、光驱等等,识别后linux会把设备放到这个目录下。
- /mnt:临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
临时文件
- /run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
- /lost+found:一般情况下为空的,系统非法关机后,这里就存放一些文件。
- /tmp:这个目录是用来存放一些临时文件的。
账户
- /root:系统管理员的用户主目录。
- /home:用户的主目录,以用户的账号命名的。
- /usr:用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
- /usr/bin:系统用户使用的应用程序与指令。
- /usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。
- /usr/src:内核源代码默认的放置目录。
运行过程中要用:
- /var:存放经常修改的数据,比如程序运行的日志文件(/var/log 目录下)。
- /proc:管理内存空间!虚拟的目录,是系统内存的映射,我们可以直接访问这个目录来,获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件来做修改。
扩展用的:
- /opt:默认是空的,我们安装额外软件可以放在这个里面。
- /srv:存放服务启动后需要提取的数据(不用服务器就是空)
改变当前目录位置(cd)
了解完文件系统,我们就来学习如何移动我们所在文件夹的位置。在前往其他文件夹之前,我们首先得知道我们当前所处的位置。命令行中 $ 符号前的字符显示的就是我们当前的位置,我们也可以使用pwd这个指令输出我们当前所在的文件夹:
~$ pwd
/home/enoch
不知道大家有没有注意的,默认情况下我们的 $ 符号前有一个 ~,这表明我们当前在系统指定的默认目录 /home/ecnoh 中,也就是下图图形界面中的位置:
有意思的是,你会发现原来Desktop桌面也只是一个文件夹,只不过里面的内容会显示在桌面而已。
当我们知道自己的位置后,我们可以使用 cd(change directory)指令切换到不同的文件夹中,如果想去Desktop文件夹,直接输入下面的指令即可。
~$ cd Desktop/
这时候,不仅仅 $ 符号前的内容变成了 ~/Desktop,说明我们已经在Desktop这个文件夹中了,之后所有的操作也都会在此文件夹中生效。如果此时再用pwd指令,也会发现我们的位置发生了改变
~/Desktop$ pwd
/home/enoch/Desktop
以下列举的就是常用的cd指令:
1. 返回上一级目录
~/Desktop$ cd ..
~$
3. 进入子文件夹
陌生情况下大家的桌面是没有这个 new_folder 文件夹的,大家可以手动创建,或者使用后面教的创建指令 $ mkdir ~/Desktop/new_folder 先创建一个子文件夹,然后运行下面的指令:
~$ cd Desktop/new_folder/
~/Desktop/new_folder$
3. 返回上级目录两次
~/Desktop/new_folder$ cd ../../
~$
4. 返回你刚才所在的目录
~$ cd -
/home/enoch/Desktop/new_folder
~/Desktop/new_folder$
5. 前往 Home
~/Desktop/new_folder$ cd ~
~$
6. 输入绝对路径,前往电脑的任何地方
~$ cd /home/enoch/Desktop/new_folder
~/Desktop/new_folder$
文本操作
查看文件夹内容
如果光能移动当前位置,可是无法查看文件夹中的内容就没有意义了。所以我们需要 ls(list)这个指令来查看每个文件夹中的内容,如果我们移动到Desktop这个目录,然后使用 ls,那么桌面中的new_folder这个子文件夹就会被显示出来:
~/Desktop$ ls
new_folder
查看的方式有很多种,我们可以在 ls 后面添加不同的参数,来获得更多与文件相关的信息。
如果想要查看文件的详细信息我们可以添加 -l(long的简写)参数,这个指令会打印出文件的权限 drwxr-x-x(我们之后的章节再探讨这个),用户名,文件大小,修改日期和文件名:
~/Desktop$ ls -l
total 4
drwxr-x-x 2 enoch enoch 4096 Nov 6 08:49 new_folder
如果使用 -a(all的简写),所有的文件则会被显示出来,此时就能看到以 . 开头的隐藏文件:
~/Desktop$ ls -a
. .. new_folder
我们也可以将多个参数结合起来,来查看更加详细的信息,比如我们既想查看所有的隐藏文件和文件的具体信息,我们就可以添加 -al 这个参数:
每个指令的用法有很多,大家可以使用 man(manual)这个命令,来查看指令的具体内容:
$ man ls
下面为了帮助大家的重点能放在指令上,我就不输出 $ 前面的路径提示了。
创建和删除
查了查看文件外,最重要的操作便是创建、删除、移动和复制文件,下面我们就来看看哪些指令可以实现这些操作。
如果想要创建文件夹,我们可以使用 mkdir(make directory)指令加上新文件夹的名字即可:
$ mkdir folder1
我们也可以直接用 mkdir 直接创建子文件夹:
$ mkdir folder1/folder2
这样folder2就会被创建在folder1中了
要删除文件夹的话,我们可以使用 rmdir(remove directory)命令。rmdir的前提条件就是被删除的文件夹必须得是空的,不然命令就会失败。所以fodler1是无法用 rmdir 删除的,因为其中有一个folder2文件夹。但是我们直接删除folder2是可以的:
$ rmdir folder1/folder2
如果想要把文件夹中的内容全部删除,不管里面是否有其他文件,那么可以使用 rm 加参数 -r 或 -R(recursively)来删除文件夹中的全部内容(此操作很危险,请谨慎使用)
$ rm -r folder1
如果要创建文件,使用touch指令加上文件名即可:
$ touch new_file
删除文件可以使用 rm 指令
$ rm new_file
如果要删除多个文件,可以直接在指令后加上所有的文件名
$ rm file1 file2 file3
移动和复制
mv(move)指令可以将一个文件或者文件夹移动到其他的位置
$ mv file1 folder1 # 将file1移动到文件夹folder1中
mv也有重命名的功能
$ mv file1.txt file2.txt # 将file1.txt重命名为file2.txt
cp(copy)指令可以复制文件和文件夹,要注意的是,如果一个文件夹不为空,那么需要加上 -r 或 -R 参数才能复制:
$ cp file1 folder1 # 将file1复制到folder1中
$ cp -R folder1 folder2 # 将folder1全部复制到folder2中
编辑文件
Linux自带文本编辑器nano,我们在nano后加上想要编辑的文件就可以了
$ nano file1.txt
之后我们就可以自己在nano中直接编辑文件内容
然后按 “Ctrl + s” 保存,再按 “Ctrl + x” 退出。
如果要查看文件内容,可以使用 cat(catenate) 命令
$ cat file1.txt
Hello World!
我们也可以使用在 cat <file_name> 之后加上 > 用一个文件中的内容覆盖掉另一文件的内容
$ cat file1.txt > file2.txt # file2.txt的内容会被file1.txt完全覆盖
$ cat file2.txt
Hello World!
如果不想要完全覆盖文件的内容,我们可以使用 >> 将文件的内容添加到新文件的末尾:
$ cat file1.txt >> file2.txt
$ cat file2.txt
Hello World!
Hello World!
重点命令总结
$ man ls # 显示指令ls的具体信息
$ pwd # 显示当前路径
$ cd Desktop # 进入Desktop文件夹中
$ ls # 显示当前目录中含有的文件和文件夹
$ mkdir new_folder # 创建文件夹new_folder
$ rmdir new_folder # 删除文件夹new_folder
$ touch new_file # 创建new_file文件
$ rm new_file # 删除new_file
$ mv new_file new_folder # 加new_file移到new_folder中
$ cp new_file new_folder # 将new_file复制到new_folder中
$ nano file1 # 用nano文本编辑器编辑文件
$ cat file1 # 在终端查看file1内容
$ cat file1 > file2 # 用file1的内容覆盖掉file2的内容
$ cat file1 >> file2 # 在file2文件的末尾加上file1的内容
实践练习
使用本章学到的命令创建一个新的文件夹 folder1,然后在 folder1 中创建新的文件 file1.txt,并用nano给 file1.txt 编辑任意内容。最后创建一个 folder2,将 folder1 完全复制到 folder2 中,最后删除整个 folder1 文件夹。