看到有篇介绍《Linux 文件系统详解》的文章介绍,感觉自己对于linux文件的分布和意义,还处于一知半解的状态中。于是乎,学习、总结一下。
安装tree:
ubuntu:sudo apt-get install tree
centos:yum -y install tree
使用:
1. tree /
注意:/之前有一个空格上述指令中的 / 指的是根目录。系统中的其他目录都是从根目录分支而出,当你运行 tree 命令,并且告诉它从根目录开始,那么你就可以看到整个目录树,系统中的所有目录及其子目录,还有它们的文件。所包含的是你的账户目录下所有的文件夹以及文件的目录的形式,是整棵大树。(如果你的系统中,所包含的文件过多,那么会花费一段时间才能完成全部的显示)
2. tree -L 1/
上面的指令可以翻译为“只显示以 /(根目录) 开头的目录树的第一级”。 -L 选项告诉树你想看到多少层目录。后面的的数字可以是1,2,3.....
[zoe@215 ~]$ tree -L 2/
.
├── anaconda2
│ ├── bin
│ ├── conda-meta
│ ├── doc
│ ├── envs
│ ├── etc
│ ├── include
│ ├── lib
│ ├── libexec
│ ├── LICENSE.txt
│ ├── mkspecs
│ ├── phrasebooks
│ ├── pkgs
│ ├── plugins
│ ├── qml
│ ├── sbin
│ ├── share
│ ├── ssl
│ ├── translations
│ └── var
├── Desktop
│ └── Pycharm.desktop
├── Documents
│ ├── DCASE2017-baseline-system-master-docker
│ ├── DCASE2017-baseline-system-master-docker.zip
│ ├── master-docker.tar
│ ├── system-3
│ ├── Test
│ └── theano_gpu.py
├── Downloads
│ ├── Anaconda2-4.4.0-Linux-x86_64.sh
│ ├── pycharm-2018.1.2
│ └── pycharm-professional-2018.1.2.tar.gz
├── Music
├── Pictures
├── Public
├── rand.py
├── Templates
├── tensorflow
└── Videos
这是所显示是根目录这颗大树的一小部分,跟随者数字的增大,各个层级会越来详细,直至整棵大树显现出来。同时,可以使用cd、ls等命令,对于linux系统中的各个文件进行查看。
其他常用的tree命令:
[zoe@215 /]$ tree --help
usage: tree [-acdfghilnpqrstuvxACDFQNSUX] [-H baseHREF] [-T title ] [-L level [-R]]
[-P pattern] [-I pattern] [-o filename] [--version] [--help] [--inodes]
[--device] [--noreport] [--nolinks] [--dirsfirst] [--charset charset]
[--filelimit[=]#] [--si] [--timefmt[=]] []
------- Listing options -------
-a All files are listed.
-d List directories only.
-l Follow symbolic links like directories.
-f Print the full path prefix for each file.
-x Stay on current filesystem only.
-L level Descend only level directories deep.
-R Rerun tree when max dir level reached.
-P pattern List only those files that match the pattern given.
-I pattern Do not list files that match the given pattern.
--noreport Turn off file/directory count at end of tree listing.
--charset X Use charset X for terminal/HTML and indentation line output.
--filelimit # Do not descend dirs with more than # files in them.
--timefmt Print and format time according to the format .
-o filename Output to file instead of stdout.
--du Print directory sizes.
--prune Prune empty directories from the output.
-------- File options ---------
-q Print non-printable characters as '?'.
-N Print non-printable characters as is.
-Q Quote filenames with double quotes.
-p Print the protections for each file.
-u Displays file owner or UID number.
-g Displays file group owner or GID number.
-s Print the size in bytes of each file.
-h Print the size in a more human readable way.
--si Like -h, but use in SI units (powers of 1000).
-D Print the date of last modification or (-c) status change.
-F Appends '/', '=', '*', '@', '|' or '>' as per ls -F.
--inodes Print inode number of each file.
--device Print device ID number to which each file belongs.
------- Sorting options -------
-v Sort files alphanumerically by version.
-r Sort files in reverse alphanumeric order.
-t Sort files by last modification time.
-c Sort files by last status change time.
-U Leave files unsorted.
--dirsfirst List directories before files (-U disables).
------- Graphics options ------
-i Don't print indentation lines.
-A Print ANSI lines graphic indentation lines.
-S Print with ASCII graphics indentation lines.
-n Turn colorization off always (-C overrides).
-C Turn colorization on always.
------- XML/HTML options -------
-X Prints out an XML representation of the tree.
-H baseHREF Prints out HTML format with baseHREF as top directory.
-T string Replace the default HTML title and H1 header with string.
--nolinks Turn off hyperlinks in HTML output.
---- Miscellaneous options ----
--version Print version and exit.
--help Print usage and this help message and exit.
****************************************************
格式:tree + 参数
1 tree命令行参数:
2
3 -a 显示所有文件和目录。
4 -A 使用ASNI绘图字符显示树状图而非以ASCII字符组合。
5 -C 在文件和目录清单加上色彩,便于区分各种类型。
6 -d 显示目录名称而非内容。
7 -D 列出文件或目录的更改时间。
8 -f 在每个文件或目录之前,显示完整的相对路径名称。
9 -F 在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*","/","=","@","|"号。
10 -g 列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码。
11 -i 不以阶梯状列出文件或目录名称。
12 -I 不显示符合范本样式的文件或目录名称。
13 -l 如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录。
14 -n 不在文件和目录清单加上色彩。
15 -N 直接列出文件和目录名称,包括控制字符。
16 -p 列出权限标示。
17 -P 只显示符合范本样式的文件或目录名称。
18 -q 用"?"号取代控制字符,列出文件和目录名称。
19 -s 列出文件或目录大小。
20 -t 用文件和目录的更改时间排序。
21 -u 列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码。
22 -x 将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该子目录予以排除在寻找范围外。
23 tree -L 4 >dirce.doc #tree支持重定向至文件,即可生成UTF8格式的文档..我们也可以在windows 下查看..
#注意:生成的TXT或其他文件在win下面打开时也为乱码...这时我们要选择字符编码为UTF-8..当然..UTF-8是你linux下的默认字符集才可以.....
常见的文件目录
/bin
/bin 目录是包含一些二进制文件的目录,即可以运行的一些应用程序。 你会在这个目录中找到上面提到的 ls 程序,以及用于新建和删除文件和目录、移动它们基本工具。还有其它一些程序,等等。文件系统树的其他部分有更多的 bin 目录,但我们将在一会儿讨论这些目录。
/boot
/boot 目录包含启动系统所需的文件。我必须要说吗? 好吧,我会说:不要动它! 如果你在这里弄乱了其中一个文件,你可能无法运行你的 Linux,修复被破坏的系统是非常痛苦的一件事。 另一方面,不要太担心无意中破坏系统:你必须拥有超级用户权限才能执行此操作。
/dev
/dev 目录包含设备文件。 其中许多是在启动时或甚至在运行时生成的。 例如,如果你将新的网络摄像头或 USB 随身碟连接到你的机器中,则会自动弹出一个新的设备条目。
/etc
/etc 的目录名称会让人变得非常的困惑。/etc 得名于最早的 Unix 系统们,它的字面意思是 “etcetera”(诸如此类) ,因为它是系统文件管理员不确定在哪里放置的文件的垃圾场。
现在,说 /etc 是“要配置的所有内容Everything To Configure”更为恰当,因为它包含大部分(如果不是全部的话)的系统配置文件。 例如,包含系统名称、用户及其密码、网络上计算机名称以及硬盘上分区的安装位置和时间的文件都在这里。 再说一遍,如果你是 Linux 的新手,最好是不要在这里接触太多,直到你对系统的工作有更好的理解。
/home
/home 是你可以找到用户个人目录的地方。里面包含了各个用户的信息,一般情况下,都是在服务器上建立不同的账户,以防止对于他们的环境或这是工程进行干扰。
/lib
/lib 是库文件所在的地方。库是包含应用程序可以使用的代码文件。它们包含应用程序用于在桌面上绘制窗口、控制外围设备或将文件发送到硬盘的代码片段。
在文件系统周围散布着更多的 lib 目录,但是这个直接挂载在 / 的 /lib 目录是特殊的,除此之外,它包含了所有重要的内核模块。 内核模块是使你的显卡、声卡、WiFi、打印机等工作的驱动程序。
/media
在 /media 目录中,当你插入外部存储器试图访问它时,将自动挂载它。与此列表中的大多数其他项目不同,/media 并不追溯到 1970 年代,主要是因为当计算机正在运行而动态地插入和检测存储(U 盘、USB 硬盘、SD 卡、外部 SSD 等),这是近些年才发生的事。
/mnt
然而,/mnt 目录是一些过去的残余。这是你手动挂载存储设备或分区的地方。现在不常用了。
/opt
/opt 目录通常是你编译软件(即,你从源代码构建,并不是从你的系统的软件库中安装软件)的地方。应用程序最终会出现在 /opt/bin 目录,库会在 /opt/lib 目录中出现。
稍微的题外话:应用程序和库的另一个地方是 /usr/local,在这里安装软件时,也会有 /usr/local/bin 和 /usr/local/lib 目录。开发人员如何配置文件来控制编译和安装过程,这就决定了软件安装到哪个地方。
/proc
/proc,就像 /dev 是一个虚拟目录。它包含有关你的计算机的信息,例如关于你的 CPU 和你的 Linux 系统正在运行的内核的信息。与 /dev 一样,文件和目录是在计算机启动或运行时生成的,因为你的系统正在运行且会发生变化。
/root
/root 是系统的超级用户(也称为“管理员”)的主目录。 它与其他用户的主目录是分开的,因为你不应该动它。 所以把自己的东西放在你自己的目录中,伙计们。
/run
/run 是另一个新出现的目录。系统进程出于自己不可告人的原因使用它来存储临时数据。这是另一个不要动它的文件夹。
/sbin
/sbin 与 /bin 类似,但它包含的应用程序只有超级用户(即首字母的 s )才需要。你可以使用 sudo 命令使用这些应用程序,该命令暂时允许你在许多 Linux 发行版上拥有超级用户权限。/sbin 目录通常包含可以安装、删除和格式化各种东西的工具。你可以想象,如果你使用不当,这些指令中有一些是致命的,所以要小心处理。
/usr
/usr 目录是在 UNIX 早期用户的主目录所处的地方。然而,正如我们上面看到的,现在 /home 是用户保存他们的东西的地方。如今,/usr 包含了大量目录,而这些目录又包含了应用程序、库、文档、壁纸、图标和许多其他需要应用程序和服务共享的内容。
你还可以在 /usr 目录下找到 bin,sbin,lib 目录,它们与挂载到根目录下的那些有什么区别呢?现在的区别不是很大。在早期,/bin 目录(挂载在根目录下的)只会包含一些基本的命令,例如 ls、mv 和 rm ;这是一些在安装系统的时候就会预装的一些命令,用于维护系统的一个基本的命令。 而 /usr/bin 目录则包含了用户自己安装和用于工作的软件,例如文字处理器,浏览器和一些其他的软件。
但是许多现代的 Linux 发行版只是把所有的东西都放到 /usr/bin 中,并让 /bin 指向 /usr/bin,以防彻底删除它会破坏某些东西。因此,Debian、Ubuntu 和 Mint 仍然保持 /bin 和 /usr/bin (和 /sbin 和 /usr/sbin )分离;其他的,比如 Arch 和它衍生版,只是有一个“真实”存储二进制程序的目录,/usr/bin,其余的任何 bin 目录是指向 /usr/bin 的“假”目录。
/srv
/srv 目录包含服务器的数据。如果你正在 Linux 机器上运行 Web 服务器,你网站的 HTML文件将放到 /srv/http(或 /srv/www)。 如果你正在运行 FTP 服务器,则你的文件将放到 /srv/ftp。
/sys
/sys 是另一个类似 /proc 和 /dev 的虚拟目录,它还包含连接到计算机的设备的信息。
在某些情况下,你还可以操纵这些设备。 例如,我可以通过修改存储在 /sys/devices/pci0000:00/0000:00:02.0/drm/card1/card1-eDP-1/intel_backlight/brightness 中的值来更改笔记本电脑屏幕的亮度(在你的机器上你可能会有不同的文件)。但要做到这一点,你必须成为超级用户。原因是,与许多其它虚拟目录一样,在 /sys 中打乱内容和文件可能是危险的,你可能会破坏系统。直到你确信你知道你在做什么。否则不要动它。
/tmp
/tmp 包含临时文件,通常由正在运行的应用程序放置。文件和目录通常(并非总是)包含应用程序现在不需要但以后可能需要的数据。
你还可以使用 /tmp 来存储你自己的临时文件 —— /tmp 是少数挂载到根目录下而你可以在不成为超级用户的情况下与它进行实际交互的目录之一。
/var
/var 最初被如此命名是因为它的内容被认为是可变的variable,因为它经常变化。今天,它有点用词不当,因为还有许多其他目录也包含频繁更改的数据,特别是我们上面看到的虚拟目录。
不管怎样,/var 目录包含了放在 /var/log 子目录的日志文件之类。日志是记录系统中发生的事件的文件。如果内核中出现了什么问题,它将被记录到 /var/log 下的文件中;如果有人试图从外部侵入你的计算机,你的防火墙也将记录尝试。它还包含用于任务的假脱机程序。这些“任务”可以是你发送给共享打印机必须等待执行的任务,因为另一个用户正在打印一个长文档,或者是等待递交给系统上的用户的邮件。
遇到的问题
1.[fanyiyi@218 ~]$ sudo dnf install tree
[sudo] password for fanyiyi:
sudo:dnf:找不到命令
解决方法:根据dnf命令中的介绍,在安装dnf之前,需要先安装epel-release 依赖,之后再使用 epel-release 依赖中的 YUM 命令来安装 DNF 包。
yum install peel-release
yum install dnf
在安装的过程中,显示找不到合适版本的dnf。
所以,放弃这条路。
后来,发现可以直接使用yum 安装tree
yum -y install tree
显示,tree 安装成功!
参考文章:
如何在Centos7中添加Tree命令
linux下tree命令详解
Linux tree命令
dnf命令
27 个 Linux 下软件包管理工具 DNF 命令例子