Linux命令总结之文件操作

HyriKuma

总结一些linux系统下常用的文件操作命令,用于管理文件和系统目录。

1. Linux的目录结构

Linux的目录结构是层次化的树状结构,文件目录的顶层即为根目录/,所有文件和目录都是根目录的衍生,以子文件或者是子目录的形式被倒挂在根目录之下,构成整个linux文件系统。

   graph TD;
    / --> bin
    / --> boot
    / --> dev
    / --> etc
    / --> 1[...]
    bin --> apt
    bin --> vim
    bin --> 2[...]
    etc --> init.d
    etc --> 3[...]
    boot --> 4[...]
    dev --> 5[...]
    1[...] --> 6[...]

1.1 目录功能

根目录下的不同子目录均承担着不同的作用,通常来说根目录衍生出来的一级目录可以简单归纳为如下功能作用

一级目录 功能作用
/bin 存放系统命令,均为一些可执行的二进制文件
/boot 存放引导加载程序和内核镜像文件,确保系统能被正常引导启动
/dev 存放系统所使用设备文件,比如硬盘分区、终端、串口等文件
/etc 存放系统服务和系统全局的配置文件,如网络配置、软件包配置、用户组配置等
/home 存放每个用户的主目录,也被称为家目录
/lib 存放系统运行时的共享程序库,供系统不同程序共享使用
/lost+found 用于临时保存丢失的文件
/media 用于挂载外部可移动设备,比如一些驱动
/mnt 用于手动挂载一些可移动设备
/opt 用于存放一些第三方软件包和应用程序
/proc 实质为由内存映射出来的虚拟目录,存放在内存中,包含当前运行进程和内核参数的动态信息
/root 根用户的家目录,用于存放根用户的使用文件,只有根用户才有权限访问
/srv 存放服务相关的文件和数据
/sys 存放内核参数运行时的访问、驱动以及设备的相关信息
/tmp 用于存放临时文件
/usr 存放系统用户使用的应用程序和文件
/var 存放动态变化的数据文件,比如日志文件、缓存文件等

2. 目录切换

在Linux系统中,切换目录的命令是cd命令,也就是change directory,其基本语法为:

1
cd [切换目录路径]

在所切换的目录路径中,可以是绝对路径或相对路径。比如:

切换到绝对路径

1
cd /etc/nginx/sites-available

这表示将当前目录切换至以根目录为起点的/etc/nginx/sites-available/上。

切换到相对路径

1
cd nginx/sites-available

这表示在当前目录为/etc的位置基础上,将目录切换至/etc下的nginx/sites-available上。

而要想将当前目录切换至上一级目录,则采用命令

1
cd ..

如果要切换至上上级目录,则为

1
cd ../..

以此类推。

如果要切换至/home目录,可以使用

1
cd ~

或者直接使用

1
cd

想要将当前目录切换至上一次的工作目录,可以使用

1
cd -

3. 目录列出显示

要想列出当前目录下的文件和子目录,应该使用ls也就是list命令,基本语法为

1
ls [选项] [文件目录]

其中一些常用命令为

1
2
3
4
5
6
ls -l #以详细列表的形式列出文件和目录的权限、所有者、大小等信息
ls * #查看当前目录的所有子目录和文件以及下一级目录中的所有子目录和文件
ls -a #显示所有文件目录,包括隐藏文件
ls -t #以修改时间排序显示
ls -R #递归显示当前目录和子目录的所有内容
...

想要列出其他目录的文件和子目录,同cd命令一样,只需要在ls后添加目标路径的绝对或相对路径即可。

1
ls /home/user

想要查看当前所在目录,使用命令

1
pwd

而想要查看整个目录的完整树状目录结构,可以通过安装tree命令来实现。

1
sudo apt install tree #Ubuntu

通过tree命令,即可列出某个目录的所有内容的树状结构。

1
tree [目录路径]

同样目录路径遵循相对路径和绝对路径的原则。

4. 目录与文件的创建和删除

4.1 目录和文件的创建

在Linux中,想要创建一个空文件,需要使用touch命令,写法如下:

1
touch [选项] filename #选项可选,filename即为文件名

这代表在当前目录下创建一个空文件,如果文件已存在,则更新文件的访问和修改时间。

想要创建多个文件,只需要以空格隔开。

1
touch file1 file2 file3

而要想创建并向文件写入内容,可以使用echo命令。

1
2
echo your_text > file.txt #覆盖文件原有内容
echo your_text >> file.txt #向文件原有内容进行追加

另外也可以使用文本编辑器来创建并打开文件,比如使用vim、vi、nano这类文本编辑命令,写法为:

1
nano readme.md

这表示创建一个名为readme.md的文件并打开进行编辑。

如果要创建一个新的空目录,需要使用mkdir命令,即make directory。

1
2
mkdir new_dir #在当前目录下创建一个新的子目录
mkdir -p parent_dir/child_dir #即在当前目录下创建一个parent空目录,并在其中再创建一个child空目录,实现多层嵌套

目录的创建同样遵循相对路径和绝对路径的规则,另外需要注意在Linux下的同一目录中创建的文件夹和文件名称不得重复。

4.2 目录和文件的删除

在Linux中删除文件,使用的是rm命令,即remove。

1
rm [选项] filename

同样要同时删除多个文件,只需要以空格隔开。

1
rm file1 file2 file3

其中rm命令的常用选项有-r-f-i-v等。

1
2
3
4
rm -r dirname #递归删除指定目录及其所有内容
rm -f filename #强制删除文件,不进行提示
rm -i filename #在删除前和用户进行交互式确认
rm -v filename #在删除文件时显示详细信息

而想要删除一个空目录,则需要使用rmdir命令,即remove directory。

1
rmdir [选项] empty_dir #选项同rm命令的选项

比如在当前目录下存在子目录结构

1
2
3
top
└── parent
└── child

在均为空目录的前提下,要想删除top目录及其以下所有子目录,则应该输入命令

1
rmdir -p top/parent/child

5. 目录与文件的复制和移动

要将文件从一个目录复制到另一个目录,需要用到cp命令,即copy,写法上在当前文件路径和目标路径之间以空格隔开。

1
cp [选项] [当前文件所在路径] [目标文件路径]

比如将一个doc.txt文件从my_dir复制到new_dir中,并将文件名修改为newdoc.txt,则应该输入命令

1
cp my_dir/doc.txt new_dir/newdoc.txt

同样,文件路径遵循绝对路径和相对路径原则。

而要想将整个目录连同其所有内容复制到另一个目录中,则需要使用-r进行递归复制

1
cp -r parent/child new_dir

目录和文件的移动(剪切)和复制的操作类似,使用的是mv即move命令,写法为

1
mv [选项] [当前文件所在路径] [目标文件路径]

同样地,要移动整个文件夹及其所有内容,需要使用-r进行递归移动。

另外如果想要在当前目录下给文件改名,也可以使用mv命令

1
mv filename new_filename

6. 文件的打包和解压缩

6.1 tar命令的压缩和解压缩

要在Linux下对多个文件进行打包、解包、查看等操作,比较常用的是tar命令,写法为

1
tar [选项] [打包归档文件] [被打包文件...] 

其中tar命令的常用选项有

1
2
3
4
5
6
-c #创建一个新的打包归档文件
-v #在打包过程中列出打包文件的详细信息
-f #指定打包归档文件的名称,这个选项必填
-x #对打包归档文件进行解包
-t #显示打包归档文件中的内容
-u #更新现有归档文件

比如要将file1、file2、file3、file4四个文件一起打包进all_file.tar这个归档文件中,应该使用-c选项,可以这样写

1
tar -cvf all_file.tar file1 file2 file3 file4

而这时要想查看打包归档文件all_file.tar中的内容,应该使用-t选项,可以这样写

1
tar -tvf all_file.tar

得到输出举例如下

1
2
3
4
-rw-r--r-- root/root  11888896 2023-11-27 14:42 file1
-rw-r--r-- root/root 11888896 2023-11-27 14:44 file2
-rw-r--r-- root/root 11888896 2023-11-27 14:44 file3
-rw-r--r-- root/root 11888896 2023-11-27 14:44 file4

而想要解包归档文件,应该使用-x选项,写法可以为

1
tar -xvf all_file.tar

而如果要更新归档文件,应该使用-u选项,比如

1
tar -uvf all_file.tar newfile

这表示将newfile添加到all_file.tar归档文件中,实现归档文件的更新。

而要想对多个文件进行同时打包压缩,需要用到压缩工具,常见的压缩工具有gzip、bzip2、xz,这里以gzip为例,比如要将file1、file2、file3、file4四个文件一起打包进all_file.tar这个归档文件中并同时进行压缩,tar命令可以写为

1
tar -cvzf all_file.tar.gz file1 file2 file3 file4

其中的-z选项即为gzip的压缩选项,其扩展名一般是.gz。

这时如果要解压缩并解包.tar.gz文件,同样使用-x的tar命令选项即可。

1
tar -xvf all_file.tar.gz

6.2 zip命令的压缩和解压缩

有些Linux系统可能并不自带zip,首先需要通过apt/yum软件安装包工具进行安装。

1
sudo apt install zip

对于使用zip命令进行文件或目录压缩,其写法为

1
zip [选项] [压缩文件名] [被执行文件或目录]

其中常用的选项有

1
2
3
-r #递归压缩,在压缩目录时需要用到
-d #删除压缩文件中的某个文件或目录
-e #为压缩文件设置解压密码

而要想在zip文件中添加新的文件或目录,其写法为

1
zip all_file.zip new_file/new_dir #如果是添加目录的话需要添加-r选项

对于文件的解压和查看,则需要用到unzip命令。

默认情况下使用unzip命令会将文件解压缩在当前目录下,要想将zip压缩文件解压缩到指定目录,需要用到-d选项

1
unzip all_file.zip -d path/new_dir_for_zip

要想指定仅仅解压缩的特定文件,或者排除特定文件,其写法为

1
2
unzip all_file.zip thisfile.txt #指定特定文件
unzip all_file.zip -x excludefile.txt #排除特定文件

另外要想查看压缩包内的内容,写法为

1
2
unzip -l all_file.zip
unzip -lv all_file.zip #显示详细信息

7. 其他

7.1 cat命令

想要查看某个文件的内容,最常用的命令是cat命令,最简单的写法为

1
cat nginx.conf

即为打开并查看nginx.conf这个文件。

当然cat也支持查看多个文件

1
cat file1 file2 file3

比较常用的cat选项有-n-b-E

1
2
3
cat -n file #显示行号
cat -b file #显示行号,但只对非空行进行编号,不计空行
cat -E file #在每行的末尾标记$符号

另外在创建文件中也可以使用cat,并同时输入多行内容,写法为

1
2
3
4
5
6
7
cat >> new_file.txt << EOF #EOF即为结束行的标记
> this is a new file
> line1
> line2
> line3
> line4
> EOF #输入完毕后添加EOF标记,即可保存退出

7.2 tail命令

tail命令通常用于查看日志文件和监控文件的实时变化,语法为

1
tail [选项] [目标文件]

搭配一些常用的选项,可以这样写

1
2
3
tail -f file.txt #实时显示文本内容及变化,比如日志文件的实时变化
tail -n 20 file.txt #显示file.txt文件最后的20行内容
tail -c 100 file.txt #显示file.txt文件最后的100个字节的内容

7.3 wc命令

wc命令能用来统计查看文本行数、字数、字符数的统计命令,常见用法有

1
2
3
wc -l file.txt #显示文件文本的行数
wc -w file.txt #显示文件文本的字数
wc -c file.txt #显示文件文本的字符数

当然wc命令还支持同时显示多个文件的文本信息

1
wc -l /var/log/nginx/* #显示nginx目录下所有文件文本的行数

7.4 du命令

du命令能用来查看文本或目录所占磁盘的空间,常见用法有

1
2
3
du -s file1 file2 file3 #查看多个文件的大小,一般-s是默认选项
du -h dir/file #以易读方式查看dir目录下的file文件的大小
du -c dir/* #显示dir目录下所有文件和子目录的大小,并计算出总和

当然同其他Linux命令一样,du命令的选项也可以组合使用,如-ch-sh等。

7.5 find命令

find命令能用于文件或目录的查找,语法为

1
find [搜索范围目录] [选项] [对象]

常用的选项有-type-name-size等,当然也可以组合使用,比如

1
find /var -type f -name nginx.log #f代表的是文本文件类型,d则为目录类型

这表示在/var目录下查找名称为nginx.log的文本类型文件。

当然find命令也可以进行模糊搜索,通过和*通配符搭配的形式,比如说

1
find /var -type f -name *.log

这表示在/var目录下查找所有以.log结尾的文本类型文件。