在Linux中操作文件

Linux 通过命令行操作文件,包括查看、编辑、复制、移动、删除、创建、搜索、匹配、压缩、解压缩文件。学会查看使用文档也很重要。

查看


cat

1
2
$ # 输出 FILE 文件的全部内容
$ cat [OPTION] FILE

cat 是 concatenate(连接)的缩写。cat 工具实际的功能是连接多个文件,然后输出。只有一个文件的时候,cat 就会直接输出这个文件,所以 cat 最常见的用途就是输出单个文件。

less

1
2
$ # 在可交互的窗口内输出 FILE 文件的内容
$ less FILE

cat 会一次性打印全部内容到终端中并退出,而 less 一次只显示一页,且支持向前/后滚动、搜索等功能。如果要在一个大文件中查找一部分内容,less 通常要比 cat 方便得多。

less 相似的指令:more, most

编辑


Nano 是在很多机器上自带的命令行文本编辑器,比 vim 和 emacs 对新手更加友好。

1
$ nano FILE  # 使用 nano 编辑 FILE 文件

复制


1
2
3
4
5
6
7
8
9
$ # 将 SOURCE 文件拷贝到 DEST 文件,拷贝得到的文件即为 DEST
$ cp [OPTION] SOURCE DEST
$ # 将 SOURCE 文件拷贝到 DIRECTORY 目录下,SOURCE 可以为不止一个文件
$ cp [OPTION] SOURCE... DIRECTORY

$ # e.g.
$ cp file1 file3 # 将 file1 复制一份到同目录,命名为 file3
$ cp file1 file2 ./file/ # 将 file1、file2 文件复制到同目录下的 file 目录中
$ cp -r file ./test/ # 将 file 文件夹及其所有子文件复制到同目录下的 test 文件夹中

硬链接和软链接

硬链接与源文件有着相同的 inode,都指向磁盘中的同一个位置。删除其中一个,并不影响另一个。

软链接与源文件的 inode 不同。软链接保存了源文件的路径,在访问软链接的时候,访问的路径被替换为源文件的路径,因此访问软链接也等同于访问源文件。但是如果删除了源文件,软链接所保存的路径也就无效了,软链接因此也是无效的1

移动


1
2
3
4
5
$ # 将 SOURCE 文件移动到 DEST 文件
$ mv [OPTION] SOURCE DEST

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

类似于 Windows 下的剪切。

删除


1
2
3
4
5
6
7
8
9
$ # 删除 FILE 文件,FILE 可以为多个文件。
$ # 如果需要删除目录,需要通过 -r 选项递归删除目录
$ rm [OPTION] FILE...

$ # e.g.
$ rm file1 # 删除 file1 文件
$ rm -r test/ # 删除 test 目录及其下的所有文件
$ rm -rf test1/ test2/ file1.txt # 删除 test1/、test2/、file1.txt 这些文件、目录。其中,这些文件或者目录可能不存在、写保护或者没有权限读写

创建


创建目录

1
2
3
4
5
6
$ # 创建一个目录,名为 DIR_NAME
$ mkdir [OPTION] DIR_NAME...

$ # e.g.
$ mkdir test1 test2 # 创建两个目录,名字分别为 test1、test2
$ mkdir -p test1/test2/test3/ # 创建路径 test1/test2/test3/

创建文件

1
2
$ # 创建一个文件,名为 FILE_NAME
$ touch FILE_NAME...

stat 命令可以显示文件的属性信息。

touch 实际上的功能是修改文件的访问时间(access time, atime)和修改时间(modification time, mtime),可以当作是摸(touch)了一下文件,使得它的访问与修改时间发生了变化。当文件不存在时,touch 会创建新文件。

搜索


1
2
3
4
5
6
7
$ # 在 PATH(路径)中根据 EXPRESSION(表达式)搜索文件
$ find [OPTION] PATH [EXPRESSION]

$ # e.g.
$ find . -name 'report.pdf' # 在当前目录搜索名为 report.pdf 的文件
$ find / -size +1G # 全盘搜索大于 1G 的文件
$ find ~/ -name 'node_modules' -type d # 在用户目录搜索所有名为 node_modules 的文件夹

模式匹配


bash 的匹配模式被称为glob

1
2
3
$ # e.g.
$ rm *.tar.gz # 删除所有以 tar.gz 结尾的压缩文件
$ mv -r *.[ch] /path # 将当前及子目录下所有以 .c 或 .h 结尾的代码移动到 /path

使用通配符前一定要确认输入无误,否则可能出现严重的后果(如 rm -rf * 会删掉当前目录的所有文件)。

压缩与解压缩


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

1
2
3
4
5
6
7
$ # 命令格式如下,请参考下面的使用样例了解使用方法
$ tar [OPTIONS] FILE...

$ # e.g.
$ tar -c -f target.tar file1 file2 file3 # 将file1、file2、file3 打包为 target.tar
$ tar -x -f target.tar -C test/ # 将 target.tar 中的文件提取到 test 目录中
$ tar -cz -f target.tar.gz file1 file2 file3 # 将 file1、file2、file3 打包,并使用 gzip 算法压缩,得到压缩文件 target.tar.gz

和大部分 Linux 命令一样,tar 命令可以组合参数。例如,以下命令等价:

1
2
3
$ tar -c -z -v -f target.tar test/
$ tar -czvf target.tar test/
$ tar -f target.tar -czv test/

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

软件的使用文档


man 命令

1
2
3
$ # 调出 tar 命令和 ls 命令的文档
$ man tar
$ man ls

会显示软件的每一个参数的含义、退出值含义、作者等内容,大而全。但一般较少带有使用样例,需要根据自身需要拼接软件参数,不利于快速上手。

tldr 软件

通过几个简单的例子让用户可以快速了解软件的使用方法。

1
$ tldr COMMAND

注意,如果出现报错:

1
mkdir:无法创建目录"/home/lzy/.tldr":文件已存在

解决办法是:

1
2
3
4
$ sudo apt-get update
$ sudo apt-get install tldr
$ mkdir -p ~/.tldr/tldr
$ sudo git clone https://github.com/tldr-pages/tldr.git ~/.tldr/tldr

附录


Linux 101 - chap 03: 软件安装与文件操作

[1] 阮一峰的网络日志 - 理解inode

2023年1月 在Linux中安装软件

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×