操作文件与目录
操作文件与目录¶
在 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.txt
、file2.txt
文件复制到同目录下的file
目录中cp file1.txt file2.txt ./file/
-
将
dir1
文件夹及其所有子文件复制到同目录下的test
文件夹中cp -r dir1 ./test/
移动文件和目录¶
mv
与 cp
的使用方式相似,效果类似于 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...
创建目录示例
创建名为 test1
、test2
的目录:
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 使用实例
-
将
file1
、file2
、file3
打包为target.tar
:tar -c -f target.tar file1 file2 file3
-
将
target.tar
中的文件提取到test
目录中:tar -x -f target.tar -C test/
-
将
file1
、file2
、file3
打包,并使用 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.tar
、archive2.tar
、archive3.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 包中的文件。