浏览文件系统
作者:互联网
当登录系统并获得shell命令提示符后,你通常位于自己的主目录中。
我一登录进去是这样的,第一行是登录时间,第二行是一个类似IP地址的东西,但是是哪里的IP地址,暂时不知道,最后是第三行,我搜索一下我之前的笔记,root是用户ID,huangzihan是系统名,#
是bash shell提示符,然后#
提示符之前应该是目录名,代码如下:
Last login: Sun May 2 12:10:32 2021 from 113.116.156.243
root@huangzihan:~#
文件系统
Windows的文件系统
你将注意到的第一个不同点是,Linux在路径名中不使用驱动器盘符。在Windows中,PC上安装的物理驱动器决定了文件的路径名。Windows会为每个物理驱动词驱动盘分配一个盘符,每个驱动器都会有自己的目录结构,以便访问存储其中的文件。
当我们双击点开我的电脑或者此电脑,可以看到设备和驱动器下有一个个命名为C、D、E、F的磁盘(物理驱动器),而这些C、D、E、F就是磁盘的符号。
举个例子在,Windows中经常看到这样的文件路径:
D:\linux-0.01内核\.git\hooks\update.sample
这种Windows文件路径表明了文件update.sample
究竟位于哪个磁盘分区中,这里我们可以看出这个文件位于我们的D盘。
如果你将test.doc保存在闪存上,该闪存由J来标识那么文件的路径就是J:\test.doc。该路径表明文件位于J盘的根目录下。
Linux的文件系统
虚拟目录
Linux则采用了一种不同的方式。Linux将文件存储在单个目录结构中,这个目录被称为虚拟目录(virtual directory)
根目录
Linux虚拟目录结构只包含一个称为根(root)目录的基础目录。根目录下的目录和文件会按照访问它们的目录路径一一列出,这点跟Windows类似。
窍门:你将会发现Linux使用正斜线(/)而不是反斜线(\)在文件路径中划分目录。在Linux中,反斜线用来标识转义字符,要是用在文件路径中的话会导致各种各样的问题。
现在我们要进入这条路径/sys/kernel/debug/usb/ehci
,操作代码如下:
root@huangzihan:/# ls -a
. bin dev home lib32 libx32 media opt root sbin swapfile tmp var
.. boot etc lib lib64 lost+found mnt proc run srv sys usr
root@huangzihan:/# cd sys/
root@huangzihan:/sys# ls -a
. .. block bus class dev devices firmware fs hypervisor kernel module power
root@huangzihan:/sys# cd kernel/
root@huangzihan:/sys/kernel# ls -a
. cgroup fscaps kexec_crash_loaded livepatch profiling security tracing vmcoreinfo
.. config iommu_groups kexec_crash_size mm rcu_expedited slab uevent_helper
boot_params debug irq kexec_loaded notes rcu_normal software_nodes uevent_seqnum
root@huangzihan:/sys/kernel# cd ..
root@huangzihan:/sys# cd kernel/
root@huangzihan:/sys/kernel# cd debug/
root@huangzihan:/sys/kernel/debug# ls -a
. cleancache dri gpio opp regmap split_huge_pages virtio-ports
.. clear_warn_once dynamic_debug hid pinctrl regulator suspend_stats wakeup_sources
acpi clk error_injection iosf_sb pm_genpd remoteproc swiotlb x86
bdi device_component extfrag kprobes pm_qos sched_debug sync zswap
block devices_deferred fault_around_bytes mce pwm sched_features tracing
cec dma_buf frontswap memcg_slabinfo ras sleep_time usb
root@huangzihan:/sys/kernel/debug# cd usb/
root@huangzihan:/sys/kernel/debug/usb# ls -a
. .. devices ehci ohci uhci xhci
root@huangzihan:/sys/kernel/debug/usb# cd ehci/
root@huangzihan:/sys/kernel/debug/usb/ehci# ls -a
. ..
root@huangzihan:/sys/kernel/debug/usb/ehci#
我们沿着这条路径一直cd
进去,最后到了ehci
,在这个目录下是没有文件的,sys的下一级目录是kernel,kernel的下一级目录是debug,debug的下一级目录是usb,usb下一级目录是ehci。
路径本身并没有提供任何有关文件究竟存放在哪个物理磁盘上的信息。
这个和Windows的相比较就知道了,Windows的路径最前面会有一个盘符,而Linux的路径就没有,而是一个/
。
挂载点
Linux会在根驱动器上创建一些特别的目录,我们称之为挂载点(mount point)。挂载点是虚拟目录中用于分配额外存储设备的目录。虚拟目录会让文件和目录出现在这些挂载点目录中,然后而实际上它们却存储在另外一个驱动器中。
通常系统文件会存储在根目录中,而用户文件则存储在另一个驱动器,如下图:
![](Linux文件结构.png)
Linux文件结构
图文件结构展示了计算机中的两块硬盘。一块硬盘和虚拟目录的根目录(由正斜线/表示)关联起来。剩下的硬盘就可以挂载到虚拟目录结构中的任何地方。在这个例子中,第二块硬盘被挂载到了/home
位置,用户目录都位于这个位置。
常见的Linux目录名称
目录 | 用途 |
---|---|
/ | 虚拟目录的根目录。通常不会在这里存储文件 |
/bin | 二进制目录,存放许多用户级的GNU工具 |
/boot | 启动目录,存放启动文件 |
/dev | 设备目录,Linux在这里创建设备节点 |
/etc | 系统配置文件目录 |
/home | 主目录,Linux在这里创建用户目录 |
/lib | 库目录,存放系统和应用程序的库文件 |
/media | 媒体目录,可移动媒体设备的常用挂载点 |
/mnt | 挂载目录,另一个可移动媒体设备的常用挂载点 |
/opt | 可选目录,常用于存放第三方软件包和数据文件 |
/proc | 进程目录 |
/root | root用户的主目录 |
/sbin | 系统二进制目录,存放许多GNU管理员级工具 |
/run | 运行目录,存放系统运行时的运行的数据 |
/srv | 服务目录,存放本地服务的相关文件 |
/sys | 系统目录,存放系统硬件信息的相关文件 |
/tmp | 临时目录,可以在该目录中创建和删除临时工作文件 |
/usr | 用户二进制目录,大量用户级的GNU工具和数据文件都存储在这里 |
/var | 可变目录,用以存放经常变化的文件,比如日志文件 |
我使用了ls -a
这条指令查看了我云服务器上的Ubuntu系统的根目录下有哪些目录,代码如下:
root@huangzihan:/# ls -a
. bin dev home lib32 libx32 media opt root sbin swapfile tmp var
.. boot etc lib lib64 lost+found mnt proc run srv sys usr
再对比一下,我这个版本Ubuntu系统和上面表格上,多出了:
- lib32
- lib64
- lost+found
- libx32
- swapfile
文件系统层级标准(FHS)
常见的目录名均基于文件系统层级标准(filesystem hierarchy standard,FHS)。FHS官方主页:http://www.pathname.com/fhs
在登陆系统并获得一个shell CLI提示符后,会话将从主目录开始。主目录是分配给用户账户的一个特有目录。用户账户在创建之后,系统通常会为其分配一个特有的目录。
可以使用图形界面在虚拟目录中跳转。想要在CLI提示符下切换虚拟目录,需要使用
cd
命令。
遍历目录
cd
命令
在Linux文件系统上,可以使用切换目录命令
cd
将shell会话切换到另一个目录。
cd命令可接受单个参数destination,用以指定想切换到的目录名。如果没有为cd命令指定目标路径,它将切换到用户主目录。
destination参数可以用两种方式表示:一种是使用绝对文件路径,另一种是使用相对文件路径。
绝对文件路径
用户可在虚拟目录中采用绝对文件路径引用目录名。绝对文件路径定义了在虚拟目录结构中该目录的确切位置,以虚拟目录的根目录开始,相当于目录的全名。
绝对文件路径总是以正斜线(/)作为起始,指明虚拟文件系统的根目录。因此,如果要指向usr目录所包含的bin目录下的用户二进制文件,可以使用如下绝对文件路径:
/usr/bin
使用绝对文件路径可以清晰表明用户想切换到的确切位置。要用绝对文件路径来切换文件系统中的某个特定位置,只需在cd命令后指定全路径名:
根据上面说的,如果我们知道我们要找的目录或者文件的路径,就可以直接cd
到该路径下,所以下面两种方法等效的:
root@huangzihan:/# ls -a
. bin dev home lib32 libx32 media opt root sbin swapfile tmp var
.. boot etc lib lib64 lost+found mnt proc run srv sys usr
root@huangzihan:/#
root@huangzihan:/# cd usr
root@huangzihan:/usr# ls -a
. .. bin games include lib lib32 lib64 libx32 local sbin share src
root@huangzihan:/usr# cd bin/
root@huangzihan:/usr/bin# ls -a
. dpkg-shlibdeps m4 setleds
.. dpkg-source mail setlogcons
'[' dpkg-split mail.mailutils setmetamode
...
...
...
root@huangzihan:/# cd /usr/bin
root@huangzihan:/usr/bin# ls -a
. dpkg-shlibdeps m4 setleds
.. dpkg-source mail setlogcons
'[' dpkg-split mail.mailutils setmetamode
...
...
...
提示符中一开始有一个波浪号(~)。在切换到另一个目录之后,这个波浪号被
/usr/bin
替代了。CLI提示符正是用它来帮助你跟踪当前所在虚拟目录结构中的位置。波浪号表明shell会话位于你的主目录中。在切换出主目录之后,如果提示符已经进行了相关配置的话,绝对文件路径就会显示在提示符中。
在我这里提示符是#
,当我打开控制台终端的那一刻,进入的是主目录,这时候#
之前是波浪号~
;当我切换cd
到根目录的时候,#
之前的是正斜线(/),再cd
到绝对路径usr/bin/
,提示符之前就是绝对路径usr/bin/
。
Last login: Sun May 2 17:17:22 2021 from 113.116.156.243
root@huangzihan:~# ls -a
. .. .bash_history .bashrc .cache .pip .profile .pydistutils.cfg .ssh .viminfo .Xauthority
root@huangzihan:~# cd ..
root@huangzihan:/# cd usr/bin/
root@huangzihan:/usr/bin#
pwd
命令和当前目录
如果没有配置好提示符来显示当前shell会话的绝对文件路径,也可以使用shell命令来显示所处的位置。pwd命令可以显示出shell会话的当前目录,这个目录被称为当前工作目录。
root@huangzihan:/# ls -a
. bin dev home lib32 libx32 media opt root sbin swapfile tmp var
.. boot etc lib lib64 lost+found mnt proc run srv sys usr
root@huangzihan:/# pwd
/
root@huangzihan:/# ls -a
. bin dev home lib32 libx32 media opt root sbin swapfile tmp var
.. boot etc lib lib64 lost+found mnt proc run srv sys usr
root@huangzihan:/# cd run
root@huangzihan:/run# ls -a
. atd.pid chronyd.pid crond.pid initctl log NetworkManager shm sudo udev uuidd
.. blkid cloud-init crond.reboot initramfs motd.dynamic resolvconf sshd systemd user
agetty.reload chrony console-setup dbus lock mount sendsigs.omit.d sshd.pid tmpfiles.d utmp
root@huangzihan:/run# pwd
/run
root@huangzihan:/run# cd log
root@huangzihan:/run/log# pwd
/run/log
root@huangzihan:/run/log#
根据上面这段代码,我们不难发现,当我们使用pwd
命令查看当前目录的时候,所显示出来的目录和提示符#
之前的路径是一致的。
窍门:在切换到新的当前目录时使用pwd命令,是很好的习惯。因为很多shell命令都是在当前工作目录中操作的,在发出命令之前,你应该始终确保自己处在正确的目录中。
root@huangzihan:/run/log# cd
root@huangzihan:~# cd /run/log
root@huangzihan:/run/log#
这上面一段代码告诉我们,我们可以使用cd 绝对路径
到我们想要的位置,也可以使用cd
直接返回到主目录。
标签:文件,浏览,文件系统,cd,sys,huangzihan,root,目录 来源: https://www.cnblogs.com/Huang-zihan/p/15183223.html