目录
/根目录
~家目录
-上次目录
.当前目录
..当前上一层目录
../..当前上上一层目录
查看根目录:ls -l或tree(若tree查询不到,则sudo apt-get install tree)。
根目录下文件名 | 描述 |
bin(binary,二进制) | 存放着最基础的二进制可执行文件,如cd、ls、pwd等 |
boot(bootloader,启动) | 存放着跟启动相关文件。vmlinuz-4.18.0-15-generic存放着系统内核。grub2文件夹存放着启动程序,相当于uboot |
cdrom | 以前经常用来挂载CD镜像,现在慢慢淘汰了 |
dev(device,设备) | 存放着设备驱动程序来访问外部设备。如/dev/mouse来访问鼠标的输入 |
etc | 存放着系统配置文件以及应用程序的配置文件。如用户信息文件/etc/passwd、系统初始化文件/etc/rc、apt、dhcp等等。在给系统安装某些软件或服务后,常常需要修改/etc目录下的文件进行配置 |
home | 存放着普通用户的主目录 |
lib | 存放着lib库(bin目录下应用程序的库文件),针对32位系统。 根文件系统上的程序所需的共享库,存放了根文件系统程序运行所需的共享文件。 如C语言标准库,包含了可被许多程序共享的代码,以避免每个程序都包含相同的子程序的副本,使得可执行文件更小。 |
lib64 | 存放着lib库(bin目录下应用程序的库文件),针对64位系统 |
media | 通常是一些自动挂载的设备目录。如读卡器、光盘、软盘和DVD等 |
mnt(mount,挂载) | 系统管理员临时挂载文件系统的安装点。如/mnt/dosa可能是使用msdos文件系统的软驱,而/mnt/exta可能是使用ext2文件系统的软驱,/mnt/cdrom可能是使用光驱等 |
opt(option,可选) | 经常用来做软件测试和第三方软件安装存放目录 |
proc(procedure,程序) | 存放着进程,目录下文件名为进程ID。 也存放着内核导出到用户空间的内核信息,如系统内存。 不占用硬盘空间。 |
root | 存放着系统管理员用户的主目录 |
run | 临时文件系统,存放系统运行以来的一些信息。当系统重启时,这个目录下的文件应该被删掉或清除。 |
sbin | 存放着root权限的二进制可执行文件,只有root用户才能执行,如lsmod、mkfs等 |
snap | 新型管理工具(以前常用apt工具) |
srv | 存放着网络服务的信息 |
sys | 把内核的设备驱动导出到用户空间,可访问目录下的文件来查看和控制内核的一些驱动设备 |
tmp | 存放程序在运行时产生的信息和数据。但在引导启动后,运行的程序最好使用/var/tmp代替/tmp,因为/var/tmp可能拥有更大的磁盘空间 |
usr | 存放着系统大部分的应用程序(整个文件系统占内存最大) |
var(variable,易变的) | 存放着易变的文件,比如目录下存放着软件运行错误信息、系统日志信息、电子邮件信息 |
比如:procfs、sysfs、devfs等,存在于内存中,通常不占用硬盘空间,向用户提供了访问系统内核数据的接口。用户和应用程序可以通过访问这些数据接口,得到系统的信息,而且内核允许用户修改内核的某些参数。
进程文件系统,通常自动挂载在/proc文件夹。procfs为用户提供内核状态和进程信息的接口,相当于Windows的任务管理器。
比如
查看CPU信息:cat /proc/cpuinfo
查看proc目录:ls /proc
文件名 | 作用 |
pid* | *表示的是进程的ID号,系统中当前运行的每一个进程都有对应的一个目录,用于记录进程所有相关信息。 对于操作系统来说,一个应用程序就是一个进程 |
self | 为软链接,指向了当前进程的目录,通过访问/proc/self/目录来获取当前进程的信息,就不用每次都获取PID |
thread-self | 为软链接,指向了当前线程。访问该文件等同于访问“当前进程pid/task/当前线程tid”的内容。 一个进程,可以包含多个线程,但至少需要一个进程,这些线程共同支撑进程的运行 |
version | 记录了当前运行的内核版本,通常使用命令“uname -r” |
cpuinfo | 记录系统中CPU的提供商和相关配置信息 |
modules | 记录了目前系统加载的模块信息 |
meminfo | 记录系统中内存的使用情况,free命令会访问该文件来获取系统内存的空闲和已使用的数量 |
filesystems | 记录内核支持的文件系统类型,通常mount一个设备时,如果没有指定文件系统并且它无法确定文件系统类型时,mount会尝试包含在该文件中的文件系统,除了那些标有“nodev”的文件系统 |
再比如
查看当前bash进程的PID号:ps
文件名 | 文件内容 |
cmdline | 只读文件,记录了该进程的命令行信息,如命令和命令参数 |
comm | 记录了进程的名字 |
environ | 进程使用的环境变量 |
exe | 软链接文件,记录命令存放的绝对路径 |
fd | 记录进程打开文件的情况,以文件描述符作为目录名 |
fdinfo | 记录进程打开文件的相关信息,包含访问权限和挂载点,由其文件描述符命名 |
io | 记录进程读取和写入情况 |
map_files | 记录了内存中文件的映射情况(以对应内存区域起始和结束命名) |
maps | 记录当前映射的内存区域,其访问权限和文件路径 |
stack | 记录当前进程的内核调用栈信息 |
status | 记录进程的状态信息 |
syscall | 显示当前进程正在执行的系统调用。第一列记录了系统调用号 |
task | 记录了该进程的线程信息 |
wchan | 记录当前进程处于睡眠状态,内核调用了相关函数 |
Linux内核在2.6版本引入了sysfs文件系统,sysfs通常会自动挂载在/sys文件夹。
/sys目录下的文件/文件夹向用户提供了一些关于设备、内核模块、文件系统以及其他内核组件的信息,比如子目录block中存放了系统中所有的块设备,而子目录bus中存放了系统中所有的总线类型(i2c、usb、sdio、pci等)。
文件名 | 作用 |
block | 记录所有在系统中注册的块设备,这些文件都是符号链接,都指向了/sys/devices目录 |
bus | 该目录包含了系统中所有的总线类型,每个文件夹都是以每个总线的类型进行命名 |
class | 包含了所有在系统中注册的设备类型,如块设备、声卡、网卡等。 文件夹下的文件同样也是一些链接文件,指向了/sys/devices目录 |
devices | 包含了系统中使用的设备,链接到设备有关的文件/文件夹最终都会指向该文件夹 |
modules | 该目录记录了系统加载的使用内核模块(每个文件夹以模块命名) |
fs | 包含了所有在系统中注册的文件系统 |
Linux内核在2.6版本之前一直使用的是devfs文件系统管理设备,它通常挂载在/dev目录下。devfs中的每个文件都对应一个设备,用户也可以通过/dev目录下的文件访问硬件。
ls -al命令显示了当前目录下的所有文件和文件夹(包括隐藏)的详细信息。
文件类型 | 字符描述 |
普通文件 | - |
目录文件(directory) | d |
链接文件(link) | l |
块输入/输出设备文件(磁盘驱动器)(block) | b |
字符输入输出设备(声卡、调制解调器)(character) | c |
管道文件(pipe) | p |
9个字符,rwx-表示读、写、执行和没有权限。
高3个:文件所有者的权限
中3个:用户组的权限
低3个:其他非本用户组的权限
关于执行权限,是指可以加载到内存中,并由操作系统加载程序执行的文件。
默认单位为字节。
如果文件名之前多了一个“.”,则说明这个文件为“隐藏文件”。
假设当前目录在A,目标访问为c1.c。
全文件名:\A\C\c1.c
相对路径:C\
绝对路径:\A\C\
插入U盘或光盘,并不会像Windows有独立的盘符可以访问,而是默认挂载在/media或/mnt目录下。例如给电脑插入U盘,系统会自动把U盘挂载在/media/用户名/目录下。
软链接:
软链接是一个指向文件路径的指针,类似于Windows中的快捷方式,但在文件系统的层次上更为底层。
如果原始文件被删除,软链接将变为悬空指针,指向一个不存在的文件。
软链接可以跨越文件系统,即可以链接到不同文件系统中的文件。
使用ls -l查看文件的类型为l,并显示链接的目标文件路径。
软链接命令参数:ln -s 原始文件 软链接文件
硬链接:
硬链接是指多个文件指向同一个索引节点,这意味着它们实际上是同一个文件,只是在文件系统中有多个文件名指向它。
如果原始文件被删除,并不会影响其它硬链接的文件,因为它们指向的是相同的数据块。
硬链接不可以跨越文件系统,即硬链接只能在同一个文件系统内创建。
使用ls -l查看文件的类型为-。
硬链接命令参数:ln 原始文件 硬链接文件
区别:
硬链接指向的是文件的内容数据块,而软链接指向的是文件的路径。
硬链接不能跨文件系统,而软链接能跨文件系统.
可以通过ls -l命令区分硬链接和软链接。
当删除原始文件时,硬链接仍然可以访问文件内容,而软链接会变为无效链接。
一个磁盘设备可包含一个或多个文件系统,但每个文件系统必须占据硬盘中单独的一个分区。Linux文件系统可以根据需要随时装载和移除,这种方法保证了文件存储空间的动态扩展和系统安全。当常用的Linux桌面版系统启动时,包含根目录的文件系统首先被装载,该文件系统上存放着保护系统正常运行的系统文件,其他文件系统在桌面环境启动时作为子系统会自动安装到主系统中。
当硬盘分区完成后,应该在该分区上建立文件系统,该操作又称为格式化。建立文件系统是通过mkfs工具来完成的。
例如:在分区/dev/hdb1上建立ext4文件系统,-t表示指定要创建的文件系统类型。
mkfs -t ext4 /dev/hdb1
Linux系统对分区的明明规则:/xyz
x:ATA接口的硬盘-hd;SCSI和SATA接口的硬盘-sd。
y:硬盘的序号。如a为第一块硬盘,b为第二块硬盘,...。
z:分区的序号。
创建文件系统后,需要将该文件系统安装到主文件系统中。
su
mkdir /mnt/dev
chmod 777 /mnt/dev
mount -t ext4 /dev/hdb1 /mnt/dev
对于一些可读写的移动设备,移除设备前需要卸载子文件系统。因为Linux系统使用了缓存机制,如果不卸载就移除设备可能会造成子文件系统数据丢失。
对于正在进行读写操作的子文件系统不能使用umount命令卸载。卸载子文件系统前,应保证其中没有文件被打开。
例如,某个已挂载的USB存储器挂载点为/mnt/usbdisk
umount /mnt/usbdisk