文章目录
- 1 文件系统树
- 2 几个特殊的目录
- 3 绝对路径与相对路径
- 4 文件系统中跳转与浏览
- 4.1 文件系统中跳转
- 4.2 查看目录内容
- 4.2.1 ls命令详解
- 4.2.2 确定文件类型示例
- 5 操作目录与文件
- 5.1 强大的通配符
- 5.2 复制目录/文件
- 5.3 移动/重命名目录/文件
- 5.4 删除目录/文件
- 5.5 创建目录
- 5.6 创建文件
1 文件系统树
与Windows类似,Linux以分层目录结构来组织所有文件。所有的文件组成了一颗树形目录,这个目录树可能包含文件和其他目录。
文件系统的第一级目录称为根目录,根目录包含文件和子目录,子目录包含更多的文件和子目录,以此类推。
与Windows不同的是,Linux总是只有一个单一的文件系统树,不管有多少个磁盘或者存储设备连接到计算机上。存储设备挂载到目录树的各个节点上。
2 几个特殊的目录
这里介绍一下几个特殊的目录:
- 根目录
/
:文件系统的最顶层是由根目录开始的。 - 当前目录
.
:用户当前所在的工作目录,比如./xxx.txt
表示当前目录下的xxx.txt
文件。 - 父目录
..
:当前目录的父目录,比如../xxx.txt
,表示与当前目录同级的xxx.txt
文件。 - 家目录
~
:每个用户都有他自己的家目录,当我们首次登录系统(或者启动终端仿真器会话)后,当前工作目录是我们的家目录。 - 先前的工作目录
-
:上次跳转前的工作目录。
3 绝对路径与相对路径
假设我有一个文件: /home/chinehe/project/linux/linux.md
- 绝对路径: 从根目录开始,紧跟着目录树的一个个分支,一直到达所期望的目录或文件。上述文件的绝对路径为:
/home/chinehe/project/linux/linux.md
- 相对路径: 相对路径指的是目标目录或文件,相对于某个目录的路径。
假设当前工作目录为/home/chine/project/
,先前工作目录为/home/chine/project/linux/
,家目录为/home/chine/
,则相对路径可以表示为:./linux/linux.md
相对于当前目录linux/linux.md
相对与当前目录../project/linux/linux.md
相对与父目录~/project/linux/linux.md
相对于家目录-/linux.md
相对于先前工作目录
4 文件系统中跳转与浏览
4.1 文件系统中跳转
常用跳转相关的命令:
pwd
:打印当前目录cd
:跳转到指定目录(更改当前工作目录)cd ~
跳转到家目录cd -
跳转到上个工作目录cd ~username
跳转到指定用户(username)的家目录。cd ..
跳转到父目录
4.2 查看目录内容
查看目录内容相关命令:
ls
列出指定目录/文件(默认为当前目录)的信息,默认使用字母顺序排序。file
打印文件内容的简单描述。
4.2.1 ls命令详解
使用ls
命令可以
使用方法:ls [OPTION]... [FILE]...
常用参数:
-a
,--all
显示所有,不忽略以.
开头的隐藏文件。-A
,--almost-all
显示几乎所有,比-a
少显示.
和..
-d
,--directory
列出目录本身,而不是其内容。-F
,--classify
在列出内容后面追加一个指示符。例如目录后面会追加一个/
-h
,--human-readable
以长格式-l
输出时,以易于人们阅读分方式打印大小 (例如, 1K 234M 2G)-l
以长格式输出-R
,--recursive
递归列出子目录的内容-S
以文件大小排序-t
按文件最后修改时间排序。
4.2.2 确定文件类型示例
5 操作目录与文件
5.1 强大的通配符
因为shell频繁地使用文件名,shell提供了以下特殊字符来帮助我们快速指定一组文件名。这些特殊字符叫做通配符,使用通配符可以语句字符组合模式来选择文件名。
接受文件名作为参数的任何命令,都可以使用通配符
通配符:
通配符 | 含义 |
---|---|
* | 匹配任意多个字符(含0、1) |
? | 匹配任意一个字符 |
[chars] | 匹配任意一个包含在字符集中的字符 |
[!chars] | 匹配任意一个不包含在字符集中的字符 |
[[:class:]] | 匹配任意一个属于指定字符类中的字符 |
常用的字符类:
字符类 | 意义 |
---|---|
[:alnum:] | 匹配任意一个字母或数字 |
[:alpha:] | 匹配任意一个字母 |
[:digit:] | 匹配任意一个数字 |
[:lower:] | 匹配任意一个小写字母 |
[:upper:] | 匹配任意一个大写字母 |
示例:
模式 | 匹配对象 |
---|---|
* | 所有文件 |
g* | 文件名以“g”开头的文件 |
b*.txt | 以”b” 开头,中间有零个或任意多个字符,并以”.txt” 结尾的文件 |
Data??? | 以“Data”开头,其后紧接着 3 个字符的文件 |
[abc]* | 文件名以”a”,”b”, 或”c” 开头的文件 |
BACKUP.[0-9][0-9][0-9] | 以”BACKUP.” 开头,并紧接着 3 个数字的文件 |
[[:upper:]]* | 以大写字母开头的文件 |
[![:digit:]]* | 不以数字开头的文件 |
*[[:lower:]123] | 文件名以小写字母结尾,或以“1”,“2”,或“3”结尾的文件 |
5.2 复制目录/文件
使用cp
命令可以复制目录/文件
用法:
cp [OPTION]... [-T] SOURCE DEST
# 复制SOURCE到DESTcp [OPTION]... SOURCE... DIRECTORY
# 复制多个SOURCE到DIRECTORYcp [OPTION]... -t DIRECTORY SOURCE...
# 将后续的所有SOURCE复制到DIRECTORY
常用选项:
选项 | 意义 |
---|---|
-a ,--archive | 复制文件和目录,以及它们的属性,包括所有权和权限。通常,副本具有用户所操作文件的默认属性。 |
-i , --interactive | 在重写已存在文件之前,提示用户确认。如果这个选项不指定,cp 命令会默认重写文件。 |
-r , --recursive | 递归地复制目录及目录中的内容。当复制目录时,需要这个选项(或者-a 选项)。 |
-u , --update | 当把文件从一个目录复制到另一个目录时,仅复制目标目录中不存在的文件,或者是文件内容新于目标目录中已经存在的文件。 |
-v , --verbose | 显示详细的命令操作信息 |
示例:
示例命令 | 运行结果 |
---|---|
cp file1 file2 | 复制文件 file1 内容到文件 file2。如果 file2 已经存在,file2的内容会被 file1 的内容重写。如果 file2 不存在,则会创建file2。 |
cp -i file1 file2 | 这条命令和上面的命令一样,除了如果文件 file2 存在的话,在文件 file2 被重写之前,会提示用户确认信息。 |
cp file1 file2 dir1 | 复制文件 file1 和文件 file2 到目录 dir1。目录 dir1 必须存在。 |
cp dir1/* dir2 | 使用一个通配符,在目录 dir1 中的所有文件都被复制到目录 dir2 中。dir2 必须已经存在。 |
cp -r dir1 dir2 | 复制目录 dir1 中的内容到目录 dir2。如果目录 dir2 不存在,创建目录 dir2,操作完成后,目录 dir2 中的内容和 dir1 中的一样。如果目录 dir2 存在,则目录 dir1 (和目录中的内容) 将会被复制到 dir2 中。 |
5.3 移动/重命名目录/文件
使用mv
命令可以执行目录/文件移动和目录/文件重命名任务。
用法:
mv [OPTION]... [-T] SOURCE DEST
# 移动SOURCE到DESTmv [OPTION]... SOURCE... DIRECTORY
# 移动多个SOURCE到DIRECTORYmv [OPTION]... -t DIRECTORY SOURCE...
# 将后续的所有SOURCE移动到DIRECTORY
当源目录/文件路径和名称,都与目标目录/文件相同时,则执行重命名操作。
常用选项:
选项 | 意义 |
---|---|
-i --interactive | 在重写一个已经存在的文件之前,提示用户确认信息。如果不指定这个选项,mv 命令会默认重写文件内容。 |
-u --update | 当把文件从一个目录移动另一个目录时,只是移动不存在的文件,或者文件内容新于目标目录相对应文件的内容。 |
-v --verbose | 当操作 mv 命令时,显示翔实的操作信息。 |
示例:
命令 | 作用 |
---|---|
mv file1 file2 | 移动 file1 到 file2。如果 file2 存在,它的内容会被 file1 的内容重写。如果 file2 不存在,则创建 file2。这两种情况下,file1 都不再存在。 |
mv -i file1 file2 | 除了如果 file2 存在的话,在 file2 被重写之前,用户会得到提示信息外,这个和上面的选项一样。 |
mv file1 file2 dir1 | 移动 file1 和 file2 到目录 dir1 中。dir1 必须已经存在。 |
mv dir1 dir2 | 如果目录 dir2 不存在,创建目录 dir2,并且移动目录 dir1的内容到目录 dir2 中,同时删除目录 dir1。如果目录 dir2存在,移动目录 dir1(及它的内容)到目录 dir2。 |
5.4 删除目录/文件
使用rm
命令可以删除目录或文件
使用删除命令时,一定要非常小心!!!!
用法:
rm [OPTION]... FILE...
# 删除目录/文件(可以一次删除多个)
常用选项:
选项 —————————— | 含义 |
---|---|
-i , --interactive | 在删除已存在的文件前,提示用户确认信息。如果不指定这个选项,rm 会默默地删除文件 |
-r , --recursive | 递归地删除文件,这意味着,如果要删除一个目录,而此目录又包含子目录,那么子目录也会被删除。要删除一个目录,必须指定这个选项。 |
-f , --force | 忽视不存在的文件,不显示提示信息。这选项覆盖了“–interactive”选项。 |
-v , --verbose | 在执行 rm 命令时,显示翔实的操作信息。 |
示例:
命令 | 运行结果 |
---|---|
rm file1 | 默默地删除文件 |
rm -i file1 | 除了在删除文件之前,提示用户确认信息之外,和上面的命令作用一样。 |
rm -r file1 dir1 | 删除文件 file1, 目录 dir1,及 dir1 中的内容。 |
rm -rf file1 dir1 | 同上,除了如果文件 file1,或目录 dir1 不存在的话,rm 仍会继续执行。 |
5.5 创建目录
使用mkdir命令,可以创建目录。
用法:
mkdir [OPTION]... DIRECTORY...
# 创建一个或多个目录
如果要创建的目录以及存在,则会打印错误信息并跳过。
5.6 创建文件
并没有专门的命令用于创建文件,但是有很多其他的方式可以实现文件的创建:
- 使用
touch
命令创建空文件
touch
命令通常用于更新文件的时间戳,但如果指定的文件不存在,则会创建一个空文件。 - 使用
>
操作符
>
操作符用于将命令的标准输出重定向到文件,并且会覆盖文件中的所有内容。如果指定的文件不存在,则会创建一个新文件。 - 使用
>>
操作符
>>
操作符也用于将命令的标准输出重定向到文件中,但是它会将输出追加到文件的末尾而不是覆盖原有内容。如果指定的文件不存在,则会创建一个新文件。 - 使用文本编辑器
还可以使用文本编辑器(如vim、nano、gedit等)来创建和编辑文件。