Ubuntu文件系统组织
简而言之:Ubuntu只有目录和文件两个东西。“/”叫做根目录,有且仅有一个根目录。使用的命令实际上也是一个文件,使用命令实际上就是系统先找到对应的命令文件然后再运行它。
目录操作
(1)特殊目录符号
.
:当前目录;
..
:上一级目录;
-
:之前所在的目录,就好比浏览器工具栏中的返回按钮;使用"cd -“之后,还会自动向控制台输出之前所在的目录;
~
:当前登录的用户目录,就是”/home/用户名"这个目录;
~account
:account用户的用户目录;
(2)cd目录跳转
命令格式为:cd 目录名;目录名可以是具体的目录,比如:cd /home/etc
;也可以是特殊目录符号,比如:cd ~
。
# 现在的目录是:~/桌面
# 使用"cd ."命令,表示跳转到当前目录
fu@fu-virtual-machine:~/桌面$ cd .
# 目录没有发生改变,还是现在的目录:"~/桌面"
fu@fu-virtual-machine:~/桌面$
# 现在的目录是:~/桌面
# 使用"cd ~"命令,表示跳转到当前用户的用户目录下,即跳转到"/home/fu"下
fu@fu-virtual-machine:~/桌面$ cd ~
# 目录发生改变,成功跳转到当前用户的用户目录下
fu@fu-virtual-machine:~$
# 现在的目录是:~
# 使用"cd .."命令,表示跳转到上一级目录中,上一级目录应该为:"/home"
fu@fu-virtual-machine:~$ cd ..
# 目录发生改变,成功跳转到上一级目录下
fu@fu-virtual-machine:/home$
# 现在的目录为:/home
# 使用"cd -"命令,表示跳转到上一个工作目录,上一个工作目录为:"~"
# 想象成浏览器上方工具栏的后退按钮
fu@fu-virtual-machine:/home$ cd -
# 会向控制台输出上一个工作目录:"~/" 即 "/home/fu"
/home/fu
# 目录发生改变,成功回到了上一个工作目录
fu@fu-virtual-machine:~$
# 现在的目录为:~
# 使用"cd ~fu"命令,表示跳转到fu用户的用户目录
fu@fu-virtual-machine:~$ cd ~fu
# 因为现在就在fu用户的目录下,所有目录没有发生改变
# 如果在别的目录使用这个命令后,就会直接回到fu用户的用户目录下
fu@fu-virtual-machine:~$
# 现在的目录为:~
# 使用"cd 具体目录"后,就会跳转到具体目录中
# 这里具体目录设置为:"/home"
fu@fu-virtual-machine:~$ cd /home
# 成功跳转
fu@fu-virtual-machine:/home$
(3)相对路径和绝对路径
绝对路径就是以/
打头的路径,以根目录(/
)为出发点;
相对路径就是不以/
打头的路径,以当前所在的目录为出发点。 比如:当前目录为/home
,使用cd fu
命令,会以/home
为出发点,找到/home
下的fu
目录,然后切换到/home/fu
目录下。
# 当前目录为:"/home"
# 使用"cd /home/fu"命令,使用绝对路径跳转
fu@fu-virtual-machine:/home$ cd /home/fu
# 成功进入"/home/fu"目录下
fu@fu-virtual-machine:~$
# 回到上一个工作目录
fu@fu-virtual-machine:~$ cd -
/home # 当前所在目录
# 使用"cd fu"目录,使用相对路径跳转
fu@fu-virtual-machine:/home$ cd fu
# 成功进入到"/home/fu"目录下
fu@fu-virtual-machine:~$
(4)PATH环境变量
使用命令必须要找到命令文件,之所以可以在任何目录使用各种命令,是因为这些命令的路劲被保存在了PATH环境变量中。
使用命令的时候,首先会在当前目录找命令文件,找到那就算求;如果找不到,就会到PATH环境变量中找,找到那也算求;如果还找不到,那只能控制台报错了。
查看PATH环境变量:echo $PATH
环境变量中有很多路径,路径之间以冒号(:
)分隔。
临时向环境变量中添加路径,关闭bash后就失效了,只能再次添加,添加的方法为:export PATH=路径:$PATH
# 输出环境变量中的内容
fu@fu-virtual-machine:/$ echo $PATH
# 路径之间以":"分隔
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
# 将当前用户的用户目录加入到环境变量中
fu@fu-virtual-machine:/$ export PATH=~:$PATH
# 加入成功第一个就是当前用户的用户目录:"/home/fu"
fu@fu-virtual-machine:/$ echo $PATH
/home/fu:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
(5)pwd命令
显示当前所在的目录
# 使用pwd命令
fu@fu-virtual-machine:~$ pwd
# 显示当前所在的目录
/home/fu
(6)查看目录与文件
ls命令完整格式:ls [选项] [指定目录]
ls /home
:列出/home下的非隐藏文件和目录;
ls -a /home
:列出/home
目录下的所有文件和目录,包括隐藏文件和隐藏目录;
ls -A /home
:在ls -a /home
的基础上,不显示两个特殊的目录:当前目录(.
)和上一级目录(..
);
ls -lh /home
:以容易阅读的方式列出文件大小(-h
需要与-l
联合使用);
ls -l /home
:显示文件的详细信息;
ls -R /home
:递归显示/home
目录下的目录和文件;
# 直接使用"ls"目录显示当前用户目录下的文件和目录
fu@fu-virtual-machine:/home$ ls ~
公共的 模板 视频 图片 文档 下载 音乐 桌面 test.txt
# 显示隐藏文件和目录
fu@fu-virtual-machine:/home$ ls -a ~
. 模板 文档 桌面 .bashrc .gnupg .sudo_as_admin_successful
.. 视频 下载 .bash_history .cache .local test.txt
公共的 图片 音乐 .bash_logout .config .profile
# 在"ls -a"的基础上,去掉了"."和".."两个目录
fu@fu-virtual-machine:/home$ ls -A ~
公共的 图片 音乐 .bash_logout .config .profile
模板 文档 桌面 .bashrc .gnupg .sudo_as_admin_successful
视频 下载 .bash_history .cache .local test.txt
# 以容易阅读的方式显示了文件大小
fu@fu-virtual-machine:/home$ ls -lh ~
# 显示出来的文件总共大小
总用量 36K
drwxr-xr-x 2 fu fu 4.0K 10月 24 20:52 公共的
drwxr-xr-x 2 fu fu 4.0K 10月 24 20:52 模板
drwxr-xr-x 2 fu fu 4.0K 10月 24 20:52 视频
drwxr-xr-x 2 fu fu 4.0K 10月 24 20:52 图片
drwxr-xr-x 2 fu fu 4.0K 10月 24 20:52 文档
drwxr-xr-x 2 fu fu 4.0K 10月 24 20:52 下载
drwxr-xr-x 2 fu fu 4.0K 10月 24 20:52 音乐
drwxr-xr-x 2 fu fu 4.0K 10月 24 20:52 桌面
-rw-rw-r-- 1 fu fu 12 10月 26 19:29 test.txt
# 递归显示
fu@fu-virtual-machine:/home$ ls -R ~
/home/fu:
公共的 模板 视频 图片 文档 下载 音乐 桌面 test.txt
/home/fu/公共的:
/home/fu/模板:
/home/fu/视频:
/home/fu/图片:
/home/fu/文档:
/home/fu/下载:
/home/fu/音乐:
/home/fu/桌面:
(7)常用目录操作
新建目录:mkdir [选项] 新建目录名
一般情况下,mkdir
命令只能建立单级目录,如果想要建立多级目录(目录中套目录),需要使用-p
选项,例如:mkdir -p test01/test02/
。
# 创建单级目录
fu@fu-virtual-machine:~$ mkdir test01
# 发现"test01"目录,创建成功
fu@fu-virtual-machine:~$ ls
公共的 模板 视频 图片 文档 下载 音乐 桌面 test01
# 创建多级目录
fu@fu-virtual-machine:~$ mkdir -p test02/test01
# 递归显示
fu@fu-virtual-machine:~$ ls -R
.:
公共的 模板 视频 图片 文档 下载 音乐 桌面 test01 test02
./公共的:
./模板:
./视频:
./图片:
./文档:
./下载:
./音乐:
./桌面:
# 发现多级目录的递归显示,创建成功
./test01:
./test02:
test01
./test02/test01:
复制目录:cp [选项] 要复制的目录 复制出的新目录名
一般情况下,cp
命令只能复制文件,如果想复制目录(递归复制),需要使用-r
选项。
但是只加-r
选项有一个缺点,就是递归复制内容,不会复制文件和目录的所有属性,比如说目录中存在快捷方式,这个快捷方式指向一个文件,但是使用这种方式递归复制后,新复制出来的快捷方式是一个普通的文件,没有指向的文件,即它已经不再是一个快捷方式了。此时就轮到-a
选项了,使用-a
选项的cp
命令既适用于目录也适用于单个文件,使用它会将目录或者文件的所有属性原本复制过来,完全可以在复制任何东西都使用cp -a 源文件 目标文件
命令。
# test01是一个多级目录,最里面的那层目录中还有一个文件
fu@fu-virtual-machine:~$ ls -R test01
test01:
test01
test01/test01:
test.txt
# "~"下的文件和目录
fu@fu-virtual-machine:~$ ls
公共的 模板 视频 图片 文档 下载 音乐 桌面 test01
# 使用"-r"选项复制目录,指定新目录名为"test01Copy"
fu@fu-virtual-machine:~$ cp -r test01 test01Copy
# 出现"test01Copy"目录
fu@fu-virtual-machine:~$ ls
公共的 模板 视频 图片 文档 下载 音乐 桌面 test01 test01Copy
# 和原目录的内容为一样,递归复制成功
fu@fu-virtual-machine:~$ ls -R test01Copy
test01Copy:
test01
test01Copy/test01:
test.txt
# "hwLink"是一个快捷方式,指向"hw.txt"文件
fu@fu-virtual-machine:~$ ls -lh | grep hw
lrwxrwxrwx 1 fu fu 6 10月 29 14:06 hwLink -> hw.txt
-rw-rw-r-- 1 fu fu 13 10月 29 14:06 hw.txt
# 分别使用"-p"和"-a"选项进行复制
fu@fu-virtual-machine:~$ cp -p hwLink hwLinkCopy1
fu@fu-virtual-machine:~$ cp -a hwLink hwLinkCopy2
# 使用"-p"选项复制出来的文件不再是一个快捷方式,因为它没有指向任何一个文件
# 使用"-a"选项复制出来的文件依旧是一个快捷方式,和原快捷方式指向同一个文件
fu@fu-virtual-machine:~$ ls -lh| grep hw
lrwxrwxrwx 1 fu fu 6 10月 29 14:06 hwLink -> hw.txt
-rw-rw-r-- 1 fu fu 13 10月 29 14:06 hwLinkCopy1
lrwxrwxrwx 1 fu fu 6 10月 29 14:06 hwLinkCopy2 -> hw.txt
-rw-rw-r-- 1 fu fu 13 10月 29 14:06 hw.txt
移动或者重命名目录:mv 要移动的目录或者原目录名 目标目录或者新目录名
mv
命令默认情况下就支持递归移动目录。
# 查看当前目录下的文件和目录
fu@fu-virtual-machine:~$ ls
公共的 模板 视频 图片 文档 下载 音乐 桌面 test01 test01Copy
# 重命名目录
fu@fu-virtual-machine:~$ mv test01Copy test02
# 重命名成功
fu@fu-virtual-machine:~$ ls
公共的 模板 视频 图片 文档 下载 音乐 桌面 test01 test02
# 递归移动目录
fu@fu-virtual-machine:~$ mv test02 test01
# 当前目录下的test02不见了
fu@fu-virtual-machine:~$ ls
公共的 模板 视频 图片 文档 下载 音乐 桌面 test01
# 发现移动到了test01目录中,目录中的内容与原来一样,递归移动成功
fu@fu-virtual-machine:~$ ls -R test01
test01:
test01 test02
test01/test01:
test.txt
test01/test02:
test01
test01/test02/test01:
test.txt
# 边移动边重命名目录
fu@fu-virtual-machine:~$ mv test01/test02 test01Copy
# 顺利移动且重命名
fu@fu-virtual-machine:~$ ls
公共的 模板 视频 图片 文档 下载 音乐 桌面 test01 test01Copy
删除目录:rm [选项] 要删除的目录
一般情况下,rm
只能删除文件,如果想要删除目录(递归删除)需要使用-r
选项。
# 当前目录下的文件和目录
fu@fu-virtual-machine:~$ ls
公共的 模板 视频 图片 文档 下载 音乐 桌面 test01 test01Copy
# 递归展示"test01Copy"目录
fu@fu-virtual-machine:~$ ls -R test01Copy
test01Copy:
test01
test01Copy/test01:
test01 test.txt
test01Copy/test01/test01:
test.txt
# 使用"-r"选项递归删除"test01Copy"目录
fu@fu-virtual-machine:~$ rm -r test01Copy
# "test01Copy"目录不复存在,删除成功
fu@fu-virtual-machine:~$ ls
公共的 模板 视频 图片 文档 下载 音乐 桌面 test01