跳转至

操作文件与目录

操作文件与目录

在 Linux 在进行操作文件与目录是使用 Linux 最基础的一个技能。不像在 Windows 和 macOS 下有图形化界面,很容易管理文件与目录,拖拽文件即可完成文件的移动,所见即所得;Linux 的命令行操作虽然繁琐一些,但是可以通过命令与参数的组合完成通过图形化界面难以实现或者无法实现的功能。

复制文件和目录

# 将 SOURCE 文件拷贝到 DEST 文件,拷贝得到的文件即为 DEST
cp [OPTION] SOURCE DEST

# 将 SOURCE 文件目录到 DIRECTORY 目录下,SOURCE 可以为不止一个文件
cp [OPTION] SOURCE... DIRECTORY

常用的选项:

选项 含义
-r, -R, --recursive 递归复制,常用于复制目录
-f, --force 覆盖目标地址同名文件
-u, --update 仅当源文件比目标文件新才进行复制

复制示例

  • file1.txt 复制一份到同目录,命名为 file2.txt

    cp file1.txt file2.txt
    

  • file1.txtfile2.txt 文件复制到同目录下的 file 目录中

    cp file1.txt file2.txt ./file/
    

  • dir1 文件夹及其所有子文件复制到同目录下的 test 文件夹中

    cp -r dir1 ./test/
    

移动文件和目录

mvcp 的使用方式相似,效果类似于 Windows 下的剪切。

# 将 SOURCE 文件移动到 DEST 文件
mv [OPTION] SOURCE DEST

# 将 SOURCE 文件移动到 DIRECTORY 目录下,SOURCE 可以为多个文件
mv [OPTION] SOURCE... DIRECTORY

常用的选项:

选项 含义
-r, -R, --recursive 递归移动,常用于移动目录
-f, --force 覆盖目标地址同名文件
-u, --update 仅当源文件比目标文件新才进行移动

删除文件和目录

# 删除 FILE 文件,FILE 可以为多个文件。
# 如果需要删除目录,需要通过 -r 选项递归删除目录
rm [OPTION] FILE...

常用的选项:

选项 含义
-f, --force 无视不存在或者没有权限的文件和参数
-r, -R, --recursive 递归删除目录及其子文件
-d, --dir 删除空目录

删除示例

删除 file1.txt 文件:

rm file1.txt

删除 test 目录及其下的所有文件:

rm -r test/

删除 test1/test2/file1.txt 这些文件、目录。其中,这些文件或者目录可能不存在、写保护或者没有权限读写:

rm -rf test1/ test2/ file1.txt

创建目录

# 创建一个目录,名为 DIR_NAME
mkdir DIR_NAME...

创建目录示例

创建名为 test1test2 的目录:

mkdir test1 test2

使用 tar 操作存档、压缩文件

经常,我们希望将许多文件打包然后发送给其他人,这时候就会用到 tar 这个命令,作为一个存档工具,它可以将许多文件打包为一个存档文件。

通常,可以使用其自带的 gzip 或 bzip2 算法进行压缩,生成压缩文件:

# 命令格式如下,请参考下面的使用样例了解使用方法
tar [OPTIONS] [FILE]...

常用选项:

选项 含义
-A 将一个存档文件中的内容追加到另一个存档文件中
-r, --append 将一些文件追加到一个存档文件中
-c, --create 从一些文件创建存档文件
-t, --list 列出一个存档文件的内容
-x, --extract, --get 从存档文件中提取出文件
-f, --file=ARCHIVE 使用指定的存档文件
-C, --directory=DIR 指定输出的目录

添加压缩选项可以使用压缩算法进行创建压缩文件或者解压压缩文件:

选项 含义
-z, --gzip, --gunzip, --ungzip 使用 gzip 算法处理存档文件
-j, --bzip2 使用 bzip2 算法处理存档文件
-J, --xz 使用 xz 算法处理存档文件

tar 使用实例

  • file1file2file3 打包为 target.tar

    tar -c -f target.tar file1 file2 file3
    

  • target.tar 中的文件提取到 test 目录中:

    tar -x -f target.tar -C test/
    

  • file1file2file3 打包,并使用 gzip 算法压缩,得到压缩文件 target.tar.gz

    tar -cz -f target.tar.gz file1 file2 file3
    

  • 将压缩文件 target.tar.gz 解压到 test 目录中:

    tar -xz -f target.tar.gz -C test/
    

  • archive1.tararchive2.tararchive3.tar 三个存档文件中的文件追加到 archive.tar

    tar -Af archive.tar archive1.tar archive2.tar archive3.tar
    

  • 列出 target.tar 存档文件中的内容

    tar -t -f target.tar
    
    # 打印出文件的详细信息
    tar -tv -f target.tar
    

存档文件的后缀名

后缀名并不能决定文件类型,但后缀名通常用于帮助人们辨认这个文件的可能文件类型,从而选择合适的打开方法。

在第一个例子中,创建得到的文件名为 target.tar,后缀名为 tar,表示这是一个没有进行压缩的存档文件。

在第二个例子中,创建得到的文件名为 target.tar.gz。将 tar.gz 整体视为后缀名,可以判断出,为经过 gzip 算法压缩(gz)的存档文件(tar)。可知在提取文件时,需要添加 -z 选项使其经过 gzip 算法处理后再进行正常 TAR 文件的提取。

同样的,通过不同压缩算法得到的文件应该有不同的后缀名,以便于选择正确的参数。如经过 xz 算法处理得到的存档文件,其后缀名最好选择 tar.xz,这样可以知道为了提取其中的文件,应该添加 --xz 选项。

为什么使用 tar 创建压缩包需要”两次处理“

tar 名字来源于英文 tape archive,原先被用来向只能顺序写入的磁带写入数据。tar 格式本身所做的事情非常简单:把所有文件(包括它们的“元数据”,包含了文件权限、时间戳等信息)放在一起,打包成一个文件。注意,这中间没有压缩的过程。

为了得到更小的打包文件,方便存储和网络传输,就需要使用一些压缩算法,缩小 tar 文件的大小。这就是 tar 处理它自己的打包文件的逻辑。在 Windows 下的一部分压缩软件中,为了获取压缩后的 tar 打包文件的内容,用户需要手动先把被压缩的 tar 包解压出来,然后再提取 tar 包中的文件。