Skip to content
On this page

文件目录管理

1. Linux目录结构

  • Linux的文件系统是采用层级式的树状目录结构,在此结构中的最上层是根目录"/"。
  • Linux文件或目录名称最长有256个字符
  • Linux文件和目录名称大小写敏感
  • .开头的文件为隐藏文件
  • 同级目录中,不允许文件和目录同名

常用目录速查表:

目录说明
/根目录,一般根目录下只存放目录,在Linux下有且只有一个根目录。所有的东西都是从这里开始
/bin(binary)存放二进制程序和系统常用命令,主要用于具体应用
/sbin(system binary)存放系统专用二进制程序和命令,需一定权限执行的命令
/usr/bin存放后期安装的一些软件
/usr/sbin存放超级用户的一些管理程序
/boot放置linux系统启动时用到的一些文件,如Linux的内核文件:/boot/vmlinuz,系统引导管理器:/boot/grub
/dev存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱 mount /dev/cdrom /mnt
/etc系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有/etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d
/home一般用户的主目录或ftp站点目录
/lib、/usr/lib、/usr/local/lib系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助
/lost+fount系统异常产生错误时,会将一些遗失的片段放置于此目录下
/mnt、/media光盘默认挂载点,通常光盘挂载于 /mnt/cdrom 下,也不一定,可以选择任意位置进行挂载。
/proc此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的目录有 /proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/* 等
/root管理员主目录
/tmp一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下
/srv服务启动之后需要访问的数据目录,如 www 服务需要访问的网页数据存放在 /srv/www 内
/usr应用程序存放目录,/usr/bin 存放应用程序,/usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件。/usr/local: 存放软件升级包。/usr/share/doc: 系统说明文件存放目录。/usr/share/man: 程序说明文件存放目录。
/var放置系统执行过程中经常变化的文件,如随时更改的日志文件 /var/log,/var/log/message:所有的登录文件存放目录,/var/spool/mail:邮件存放的目录,/var/run:程序或服务启动后,其PID存放在该目录下
/opt给主机额外安装软件所存放的目录

2. 查看文件目录

命令说明
cd [dir]切换到指定目录
ls [-options] [dir,file]查看指定目录所有内容
tree [-options] [dir]可以以树状图方式展示目录内容(层级子目录及文件)
pwd [-options]打印当前工作目录
cat [-options] [file]查看文件内容/创建文件/文件合并/追加文件内容等
more [-options] file分页显示文件内容

2.1 cd 命令

sh
# 命令格式
$ cd [dir]

cd是change directory缩写,其功能为改变当前工作目录。

命令含义
cd切换到当前用户主目录(/home/username)
cd ~切换到当前用户主目录(/home/username)
cd .保持当前目录不变
cd ..切换到上级目录
cd -在上次目录和当前目录来换切换

2.2 ls 命令

sh
# 命令格式
$ ls [-options] [dir,file]

ls是list缩写,其功能为列出目录的内容(文件及子目录),类似于Dos的dir命令

2.2.1 options

options含义
-a显示目录下 所有 子目录与文件,包含隐藏文件
-l以列表方式显示文件的详细信息
-h配合-l以人性化的方式显示 文件大小,-h 单独使用没有效果

注:options可以叠加使用且顺序无关。

sh
# 以下所有命令等价
$ ls -a -l -h
$ ls -l -h -a
$ ls -alh
$ ls -lha

2.2.2 parameter

  • parameter可以为文件或目录。parameter为目录则列出给定目录下的内容,parameter为文件名则列出给定文件。
  • parameter可以使用通配符进行模糊匹配。模糊匹配结果为多个时会列出匹配的所有文件和目录。通配符使用方式与正则类似。
通配符含义
*任意多个任意字符
?一个任意字符
[]匹配字符组中任意一个。[1,2,3]等价于[1-3],[a,b,c]等价于[a-c]
sh
ls colin*         # 匹配 以colin开头
ls colin?         # 匹配 以colin+单个字符
ls colin[1-3]     # 匹配 colin1,colin2,colin3

2.2.3 ls -l 内容详解

ls-l详解

如上图所示,各列依次为 权限 | 硬链接数 | 所有者 | 所在组 | 文件尺寸 | 修改时间 | 名称

1) 权限

权限列共有10个字符组成,其含义如下:

类别所有者权限所在组权限其他组权限
d (目录)rwxr-xr-x
- (普通文件)rw-r--r--
  • 第一列文件类型速查表如下(仅供查阅),其中d (目录),- (普通文件)最为常见:
标识符含义
d目录
-普通文件
b块特殊文件
c字符特殊文件
l软链接文件。软链接文件名列格式为: 链接名 -> 源文件地址
p先进先出(FIFO)的管道特殊文件
s本地套接字
  • 每组权限三列依次为 读|写|执行r表示可读;w表示可写;x表示可执行;-表示无对应权限

关于权限的详细信息参阅 权限管理

2) 硬链接数

关于硬链接数,可参阅 硬链接数

2.3 tree 命令

sh
# 命令格式
$ tree [-options] [dir]
  • tree可以以树状图方式展示目录内容(层级子目录及文件)
  • 系统若没有安装tree命令,可以通过sudo apt install tree来进行安装。
options含义
-d限制只显示目录,忽略文件
sh
# 显示当前目录树状图
$ tree

# 显示~/Desktop 的目录树状结构
$ tree -d ~/Desktop

2.4 cat 命令

sh
# 命令格式
$ cat [-options] [file]

cat是Concatenate缩写,其功能包含查看文件内容、创建文件、文件合并、追加文件内容等。其中最常用来查看文本文件内容。 cat会一次显示所有内容,适合 查看内容较少 的文本文件

options含义
-b显示非空行号,空行也显示但不编行号,可以用于统计有效代码行数
-n显示所有行号

nl filecat -b file 效果相同,都可以查看文本文件内容并显示非空行号

2.5 more 命令

sh
# 命令格式
$ more [-options] file
  • more命令可以用于分屏显示文本文件内容,每次只显示一页内容
  • more适合于 查看内容较多 的文本文件
  • 使用 more 查看文件时常用操作键:
操作键功能
Blank下一屏
Enter下一行
b上一屏
q退出
/keyword搜索关键字

3. 新建和删除

命令说明
touch [-options] file若文件不存在则创建文件,否则修改文件最后编辑时间
mkdir [-options] dir创建目录。-p可以层级创建目录,如mkdir -p a/b/c
rm [-options] file删除文件或目录,删除后不可恢复
rmdir [-options] dir删除目录,目录必须为空

3.1 rm 命令

sh
# 命令格式
$ rm [-options] file

rm是remove缩写,其功能是删除文件或目录(不可恢复)。

1) options

options含义
-i开启删除确认提示,所有待删除文件将逐次提示
-r删除文件或 递归删除目录 (包含子目录和文件)
-f强制删除,忽略不存在文件

注:删除目录可以使用rmdir dirrm -r dir,前者只能删除空目录,后者则可以递归删除目录(不管是否为空)

2) parameter

rm命令的parameter同样可以使用通配符。

sh
# 删除以ab开头的文本文件
$ rm ab*.txt

# 删除 test目录
$ rm -r test

# 清空当前目录,谨慎使用
$ rm -rf *

4. 拷贝和移动

命令说明
cp [-options] source_file target_file复制文件或目录
mv [-options] source_file/dir target_file/dir移动/重命名 文件或目录

4.1 cp 命令

cp是copy缩写,其功能是将拷贝文件或目录。

sh
# 命令格式
$ cp [-options] source_file target_file

1) options

options含义
-a该选项通常在复制目录时使用,它保留链接、文件属性,并递归地复制目录,简单而言,保持文件原有属性。
-i开启覆盖文件提示。cp执行时会 默认覆盖 同名目标文件。建议每次使用-i进行安全复制
-r复制文件或 递归复制目录 (包含子目录和文件)。格式为:cp -r source_dir target_dir
-v显示拷贝进度

2) parameter

  • 目标文件若与源文件同名,则target_file参数可以只写目录部分,省略目标文件名。
  • 操作对象为目录时,如果target_dir存在,则将源目录拷贝至target_dir;如果target_dir不存在,则将源目录拷贝至../target_dir重命名为指定目录。mv操作亦是如此。
sh
# 将 ~/Documents/readme.txt 拷贝为 ~/Desktop/readme.txt
$ cp ~/Documents/readme.txt ~/Desktop

# 将 ~/Download/Python 拷贝到 ~/Desktop中
$ cp -r ~/Download/Python ~/Desktop

4.2 mv 命令

sh
# 命令格式
$ mv [-options] source_file/dir target_file/dir
  • mv命令是move缩写,其功能是移动/重命名文件或目录。如果移动文件或目录的源路径和目标路径一致,仅目标名称不同,可以实现文件或目录重命名。
  • mv命令默认可以操作文件或目录,不需要提供像 cprm命令一样使用-r选项
options含义
-i开启覆盖文件提示。mv执行时会 默认覆盖 同名目标文件。建议每次使用-i进行安全移动
-v显示移动进度
sh
# 将~/Download/Python目录移动到 ~/Desktop
# 若~/Desktop/PythonCourse目录存在则拷贝至其中,若不存在则拷贝到~/Desktop中并重命名为PythonCourse
$ mv ~/Download/Python ~/Desktop/PythonCourse

# 将当前目录 test.txt 重命名为 demo.txt
$ mv -i test.txt demo.txt

5. 搜索/重定向/管道

命令说明
find [path] [-options] [expression]在目录中搜索文件
grep [-opinions] [pattern] [file]在文本文件中查找内容
echo [-option] [string]在终端中打印字符串。通常会和重定向联合使用
重定向和管道重定向:将终端输出保存至文件;管道:对终端输出进行再操作

5.1 搜索查找

5.1.1 搜索文件

sh
# 命令格式
$ find [path] [-options] [expression]
  • find命令功能非常强大,通常用来在特定目录下搜索符合条件的文件
  • 文件查找路径缺省则在当前文件件搜索,包含子目录
sh
# 在桌面及其子目录搜索所有txt文档
$ find ~/Desktop -name "*.txt"

# 在当前目录及子目录搜索文件名包含“app”的文件
$ find -name "*app*"

5.1.2 查找文件内容

sh
# 命令格式
$ grep [-opinions] [pattern] [file]
  • grep命令是一个强大的文本搜索工具
  • grep允许对文本进行模式查找
1) options
options含义
-n显示行号
-v搜索不匹配内容(相当于搜索结果取反)
-i忽略字母大小写
2) pattern

常用的两种搜索模式,正则匹配

参数含义
^b行首,搜索以b开头的行
e$行尾, 搜索以e结尾的行
sh
# 在test.txt中搜索包含colin的行
$ grep colin test.txt

# 在test.txt中忽略大小写搜素以colin开头的行并显示行号
$ grep -ni ^colin test.txt

5.2 重定向和管道

重定向和管道都需要配合其他命令使用。

5.2.1 重定向

重定向命令可以将终端输出内容保存到文件中

  • > 将终端输出保存到文件中。文件不存在则创建,存在则覆盖
  • >> 将终端输出追加到文件末尾。文件不存在则创建,存在则追加
sh
# 将“Hello”保存到 a.txt 中
$ echo Hello > a.txt

# 将当前目录树状结构 追加到 a.txt 中
$ tree -d >> a.txt

echo和重定向命令经常一起使用以将输出的文本保存到文件中。

如果echo输出内容较为复杂如包含多个空格或换行,务必使用引号包裹以避免被解析为多个命令参数。如果echo输出内容换行中包含\等特殊字符,必须使用单引号包裹才能保留换行,这在docker命令中常见。

sh
# 错误用法。双引号内容中有'\',换行将被忽略
$ echo "docker run \
-d \
--name my-mysql \
-e MYSQL_ROOT_PASSWORD=pwd \
mysql"

# 正确用法。使用单引号,换行将被保留
$ echo 'docker run \
-d \
--name my-mysql \
-e MYSQL_ROOT_PASSWORD=pwd \
mysql'

5.2.2 管道

管道是将一个命令的输出作为另一个命令的输入。可以理解为现实生活中一根管子,管子一头塞东西进去,另一头取东西出来。

常用管道命令有:

  • more:分屏显示输出内容
  • grep:对输出内容进行查询
sh
# 分屏显示 当前目录所有内容
$ ls -lha | more

# 在前目录所有内容中 搜索名称包含colin的文件或目录
$ ls -lha | grep colin

6. 文件/目录链接

6.1 软链接与硬链接

Linux中链接分为软链接和硬链接。软链接类似与Windows中的快捷方式和mac OS的替身。硬链接指可以访问到文件或目录的途径,相当于文件或目录别名。

在Linux中文件名与文件内容是分开存储的,如同C#中引用类型的堆栈内存存储方式。文件名如同一个指针指向文件内容。软硬链接也都是文件指针。不同的是软链接指向的是文件名,硬链接指向的文件内容。

软链接

Linux中删除文件首先删除文件引用,只有文件没有引用(硬链接数=0)才会被删除。如同C#中文件对象没有引用时才会被GC。软硬链接指向同一个源文件,源文件删除后,实际删除的是源文件名,所以软链接会无法使用。硬链接仍指向源文件内容,文件并不会真的删除,所以硬链接仍然正常使用。


硬链接数

硬链接数表示有多少种方式访问到对应的目录或文件。

  • 文件只能通过绝对路径访问,所以文件硬链接数一般为1,有文件硬链接同样也会增加文件硬链接数
  • 目录可以通过绝对路径访问,.方式访问。所以目录的硬链接数至少为2(无子目录)。有直接子目录时也可以通过..方式访问,所以每多一个直接子目录硬链接数+1。Linux目录的硬链接数等于直接子目录数量+2。mac OS的目录硬链接数与Linux计算方式不同

6.2 ln 命令

sh
# 命令格式
$ ln [-options] source target
  • ln命令用于创建文件链接(一般指软链接)
  • -s表示建立软链接文件,默认建立硬链接文件
  • 源文件(目录)要使用绝对路径。否则链接文件移动后会造成链接文件指向出错而无法使用
sh
# 在当前目录建立软链接文件ln123并指定/home/colin/Desktop/demo/123.txt
$ ln -s /home/colin/Desktop/demo/123.txt ln123

7. 打包压缩

命令说明
tar [-options] [file]打包解包文件
zip [-options] [file]压缩或解压zip文件

7.1 打包解包

sh
# 命令格式
$ tar [-options] [file]
  • tar是Linux最常用的备份工具。其功能是把一系列文件或目录归档到一个tar包文件中,也可以将tar包解档
  • tar归档操作只是打包并不会压缩文件
  • [file]如有多个文件或目录,使用空格分割依次排列即可
options含义
-c生成档案文件
-x解开档案文件
-v列出归档解档
-f指定档案文件名称。-f后面是tar包名称,所以在options中放在最后
-t列出档案中包含的文件
-z使用gzip压缩或解压
-j使用bzip2压缩或解压
-C解档或解压到指定目录。目录必须存在
sh
# 将English.txt,Chinese.txt,Europe(目录)归档为languages.tar
$ tar -cvf languages.tar English.txt Chinese.txt Europe

# 将languages.tar解档到当前目录
$ tar -xvf languages.tar

7.2 压缩解压

1) gzip

gzip是Linux下一种流行的压缩方式。

  • gzip压缩tar包文件后的压缩文件扩展名是.tar.gz,这是Linux中最常见的压缩格式
  • tar命令使用-z可以调用gzip对tar包进行压缩,方便实现打包压缩
  • 也可单独使用gzip压缩tar包或解压压缩文件,单使用较少。一般联合tar命令使用较多
sh
# 将English.txt,Chinese.txt,Europe(目录)压缩为languages.tar.gz
$ tar -zcvf languages.tar.gz English.txt Chinese.txt Europe

# 将languages.tar.gz解压到用户桌面
$ tar -zxvf languages.tar.gz -C ~/Desktop

2) bzip2

bzip2gzip类似也是一种流行压缩方式。

  • bzip2压缩tar包文件后压缩文件扩展名是.tar.bz2
  • tar命令使用-j可以调用bzip2对tar包进行压缩。
sh
# 将English.txt,Chinese.txt,Europe(目录)压缩为languages.tar.bz2
$ tar -jcvf languages.tar.bz2 English.txt Chinese.txt Europe

# 将languages.tar.bz2解压到用户桌面
$ tar -jxvf languages.tar.bz2 -C ~/Desktop

3) zip/unzip

zip压缩格式不同于gzip和bzip2联合tar命令使用,zip可以指定文件或目录压缩到指定的压缩包中。zip格式的压缩包常用于各大平台操作系统。

sh
# 命令格式
$ zip [-options] zip path
$ unzip [-options] path zip

通过zip压缩文件的目标文件不需要指定扩展名,默认扩展名为zip。

sh
# 将用户Download目录递归压缩到test.zip中
$ zip -r test ~/Download

# 将test.zip解压到temp目录中
$ unzip -d temp test

8. vi/vim 编辑器

vi编辑器是linux下流行的文本编辑器。它可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制。vim则是基于vi的高级编辑器。所有vim兼容vi所有的命令。Ubuntu部分版本的vi编辑器不太好用,推荐使用vim替代。

8.1 工作模式

vi编辑器有以下三种工作模式。

8.1.1 命令模式

sh
# 查看文件,如果文件不存在则新建文件
$ vi [文件名]     # 打开vi命令行编辑器并进入查看模式

进入vi编辑器之后,默认进入命令模式。任何模式,按一下ESC键,即可进入命令模式。此时从键盘上输入的任何字符都被当做编辑命令来解释,若输入的字符是合法的Vi命令,则Vi在接受用户命令之后完成相应的动作。但需注意的是,所输入的命令并不在屏幕上显示出来。若输入的字符不是Vi的合法命令,Vi会响铃报警。

8.1.2 编辑模式

在命令模式下输入插入命令i、附加命令a 、打开命令o、修改命令c、取代命令r或替换命令s都可以进入文本输入模式。在该模式下,用户输入的任何字符都被Vi当做文件内容保存起来,并将其显示在屏幕上。

命令功能
i插入光标前一个字符
I插入行首
a插入光标后一个字符
A插入行未
o向下新开一行,插入行首
O向上新开一行,插入行首

8.1.3 末行模式

sh
# 所有命令必须进入命令模式后才能执行,命令执行完毕自动进入查看模式
:               # 进入末行模式,可以执行以下命令
wq              # 保存并退出
q!              # 不保存退出
set nu          # 显示行号
set nonu        # 取消行号
%d              # 清空文件内容
输入任意数字      # 光标定位到指定行号的行首位置

在命令模式下,用户按“:”键即可进入末行模式下,此时Vi会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个“:”作为末行模式的提示符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。末行命令执行完后,Vi自动回到命令模式。

8.2. 常用操作

8.2.1 命令模式

1) 移动光标
命令功能
k上移
j下移
h左移
l右移
M光标移动到中间行
L光标移动到屏幕最后一行行首
G移动到指定行,行号 -G
w向后一次移动一个字
b向前一次移动一个字
{按段移动,上移
}按段移动,下移
Ctr-d向下翻半屏
Ctr-u向上翻半屏
Ctr-f向下翻一屏
Ctr-b向上翻一屏
gg光标移动文件开头

光标移动在默认的vi中只能使用kjhl来控制,vim则增加了上下左右键的支持支持。

2) 删除
命令功能
x删除光标后一个字符,相当于 Del
X删除光标前一个字符,相当于 Backspace
dd删除光标所在行,n dd 删除指定的行数 D: 删除光标后本行所有内容,包含光标所在字符
d0删除光标前本行所有内容,不包含光标所在字符
dw删除光标开始位置的字,包含光标所在字符
3) 撤销

u|一步一步撤销 Ctr-r|反撤销

4) 重复
命令功能
.重复上一次操作的命令
5) 文本行移动
命令功能

|文本行右移 <<|文本行左移

6) 复制粘贴
命令功能
y复制选中
yy复制当前行,n yy 复制 n 行
p在光标所在位置向下新开辟一行,粘贴
7) 可视模式
命令功能
v按字符选中文本
V按行选中,选中文本可视模式可以配合 d, y, >>, << 实现对文本块的删除,复制,左右移动
8) 查找操作
命令功能
/或?str查找
n下一个
N上一个

8.2.2 末行模式

sh
# 末行模式下,将光标所在行的abc替换成123
%s/abc/123/g

# 末行模式下,将第一行至第10行之间的abc替换成123
1, 10s/abc/123/g

Released under the MIT License.