Linux命令总结之文件操作
![](/images/my_avatar.jpg)
总结一些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 | ls -l #以详细列表的形式列出文件和目录的权限、所有者、大小等信息 |
想要列出其他目录的文件和子目录,同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 | echo your_text > file.txt #覆盖文件原有内容 |
另外也可以使用文本编辑器来创建并打开文件,比如使用vim、vi、nano这类文本编辑命令,写法为:
1 | nano readme.md |
这表示创建一个名为readme.md的文件并打开进行编辑。
如果要创建一个新的空目录,需要使用mkdir
命令,即make directory。
1 | mkdir new_dir #在当前目录下创建一个新的子目录 |
目录的创建同样遵循相对路径和绝对路径的规则,另外需要注意在Linux下的同一目录中创建的文件夹和文件名称不得重复。
4.2 目录和文件的删除
在Linux中删除文件,使用的是rm
命令,即remove。
1 | rm [选项] filename |
同样要同时删除多个文件,只需要以空格隔开。
1 | rm file1 file2 file3 |
其中rm
命令的常用选项有-r
、-f
、-i
、-v
等。
1 | rm -r dirname #递归删除指定目录及其所有内容 |
而想要删除一个空目录,则需要使用rmdir
命令,即remove directory。
1 | rmdir [选项] empty_dir #选项同rm命令的选项 |
比如在当前目录下存在子目录结构
1 | top |
在均为空目录的前提下,要想删除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 | -c #创建一个新的打包归档文件 |
比如要将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 | -rw-r--r-- root/root 11888896 2023-11-27 14:42 file1 |
而想要解包归档文件,应该使用-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 | -r #递归压缩,在压缩目录时需要用到 |
而要想在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 | unzip all_file.zip thisfile.txt #指定特定文件 |
另外要想查看压缩包内的内容,写法为
1 | unzip -l 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 | cat -n file #显示行号 |
另外在创建文件中也可以使用cat
,并同时输入多行内容,写法为
1 | cat >> new_file.txt << EOF #EOF即为结束行的标记 |
7.2 tail命令
tail
命令通常用于查看日志文件和监控文件的实时变化,语法为
1 | tail [选项] [目标文件] |
搭配一些常用的选项,可以这样写
1 | tail -f file.txt #实时显示文本内容及变化,比如日志文件的实时变化 |
7.3 wc命令
wc
命令能用来统计查看文本行数、字数、字符数的统计命令,常见用法有
1 | wc -l file.txt #显示文件文本的行数 |
当然wc
命令还支持同时显示多个文件的文本信息
1 | wc -l /var/log/nginx/* #显示nginx目录下所有文件文本的行数 |
7.4 du命令
du
命令能用来查看文本或目录所占磁盘的空间,常见用法有
1 | du -s file1 file2 file3 #查看多个文件的大小,一般-s是默认选项 |
当然同其他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结尾的文本类型文件。