Linux系统管理入门:文件系统组成及常用命令详解

1、文件系统的组成

  • 文件和目录构成单根的倒树状结构
  • 文件系统从根目录开始,表示为一个单独的/字符
  • 命名大小写敏感
  • 路径以/分割

2、重要目录

一级目录 功能(作用)
/bin/ 存放系统命令,普通用户和 root 都可以执行。放在 /bin 下的命令在单用户模式下也可以执行
/boot/ 系统启动目录,保存与系统启动相关的文件,如内核文件和启动引导程序(grub)文件等
/dev/ 系统硬件设备的保存位置,以文件的形式被内核所使用
/etc/ 配置文件保存位置。系统内所有采用默认安装方式(rpm 安装)的服务配置文件全部保存在此目录中,如用户信息、服务的启动脚本、常用服务的配置文件等
/usr/ usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。
/home/ 普通用户的主目录(也称为家目录)。在创建用户时,每个用户要有一个默认登录和保存自己数据的位置,就是用户的主目录,所有普通用户的主目录是在 /home/ 下建立一个和用户名相同的目录。如用户 liming 的主目录就是 /home/liming
/lib/ 系统调用的函数库保存位置
/media/ 挂载目录。系统建议用来挂载媒体设备,如软盘和光盘
/mnt/ 挂载目录。早期 Linux 中只有这一个挂载目录,并没有细分。系统建议这个目录用来挂载额外的设备,如 U 盘、移动硬盘和其他操作系统的分区
/misc/ 挂载目录。系统建议用来挂载 NFS 服务的共享目录。虽然系统准备了三个默认挂载目录 /media/、/mnt/、/misc/,但是到底在哪个目录中挂载什么设备可以由管理员自己决定。例如,笔者在接触 Linux 的时候,默认挂载目录只有 /mnt/,所以养成了在 /mnt/ 下建立不同目录挂载不同设备的习惯,如 /mnt/cdrom/ 挂载光盘、/mnt/usb/ 挂载 U 盘,都是可以的
/opt/ 第三方安装的软件保存位置。这个目录是放置和安装其他软件的位置,手工安装的源码包软件都可以安装到这个目录中。建议把软件放到 /usr/local/ 目录中,也就是说,/usr/local/ 目录也可以用来安装软件
/root/ root 的主目录。普通用户主目录在 /home/ 下,root 主目录直接在“/”下
/sbin/ 保存与系统环境设置相关的命令,只有 root 可以使用这些命令进行系统环境设置,但也有些命令可以允许普通用户查看
/srv/ 服务数据目录。一些系统服务启动之后,可以在这个目录中保存所需要的数据
/var/ 系统服务的数据,例如数据库文件,日志文件和网站内容等
/tmp/ 临时目录。系统存放临时文件的目录,在该目录下,所有用户都可以访问和写入。建议此目录中不能保存重要数据,最好每次开机都把该目录清空
/lost+found/ 当系统意外崩溃或意外关机时,产生的一些文件碎片会存放在这里。在系统启动的过程中,fsck 工具会检查这里,并修复已经损坏的文件系统。这个目录只在每个分区中出现,例如,/lost+found 就是根分区的备份恢复目录,/boot/lost+found 就是 /boot 分区的备份恢复目录
/proc/ 虚拟文件系统。该目录中的数据并不保存在硬盘上,而是保存到内存中。主要保存系统的内核、进程、外部设备状态和网络状态等。如 /proc/cpuinfo 是保存 CPU 信息的,/proc/devices 是保存设备驱动的列表的,/proc/filesystems 是保存文件系统列表的,/proc/net 是保存网络协议信息的……
/sys/ 虚拟文件系统。和 /proc/ 目录相似,该目录中的数据都保存在内存中,主要保存与内核相关的信息
  • 说明: 在linux7或者更高的版本中,/bin/usr/bin/sbin/usr/sbin/lib/usr/lib/lib64/usr/lib64中,/中的目录是/usr/中对应目录软连接

Linux /usr目录

子目录 功能(作用)
/usr/bin/ 存放系统命令,普通用户和超级用户都可以执行。这些命令和系统启动无关,在单用户模式下不能执行
/usr/sbin/ 存放根文件系统不必要的系统管理命令,如多数服务程序,只有 root 可以使用。
/usr/lib/ 应用程序调用的函数库保存位置
/usr/XllR6/ 图形界面系统保存位置
/usr/local/ 手工安装的软件保存位置。我们一般建议源码包软件安装在这个位置
/usr/share/ 应用程序的资源文件保存位置,如帮助文档、说明文档和字体目录
/usr/src/ 源码包保存位置。我们手工下载的源码包和内核源码包都可以保存到这里。不过笔者更习惯把手工下载的源码包保存到 /usr/local/src/ 目录中,把内核源码保存到 /usr/src/linux/ 目录中
/usr/include C/C++ 等编程语言头文件的放置目录

Linux /var 目录
/var 目录用于存储动态数据,例如缓存、日志文件、软件运行过程中产生的文件等。

/var子目录 功能(作用)
/var/lib/ 程序运行中需要调用或改变的数据保存位置。如 MySQL 的数据库保存在 /var/lib/mysql/ 目录中
/var/log/ 登陆文件放置的目录,其中所包含比较重要的文件如 /var/log/messages, /var/log/wtmp 等。
/var/run/ 一些服务和程序运行后,它们的 PID(进程 ID)保存位置
/var/spool/ 里面主要都是一些临时存放,随时会被用户所调用的数据,例如 /var/spool/mail/ 存放新收到的邮件,/var/spool/cron/ 存放系统定时任务。
/var/www/ RPM 包安装的 Apache 的网页主目录
/var/nis和/var/yp NIS 服务机制所使用的目录,nis 主要记录所有网络中每一个 client 的连接信息;yp 是 linux 的 nis 服务的日志文件存放的目录
/var/tmp 一些应用程序在安装或执行时,需要在重启后使用的某些文件,此目录能将该类文件暂时存放起来,完成后再行删除

3、文件和目录名

  • 名字不能多于255个字符
  • 所有字符都要求是有效的,除斜线(/)以外
    • 不要使用某些特殊的字符在文件名或目录名中
    • 当文件中有特殊字符时应用单引号保护起来
  • 命名和大小写敏感

4、绝对路径和相对路径

  • 绝对路径
    • 以根开头的路径
    • 文件位置的全路径
    • 在任何位置都可以引用
  • 相对路径
    • 不以斜线(/)开头
    • 在当前工作目录的相对位置
    • 在特定的位置才可以引用

5、相关命令

5.1 ls命令

ls命令 就是list的缩写,用来显示目标列表,在Linux中是使用率较高的命令。ls命令的输出信息可以进行彩色加亮显示,以分区不同类型的文件。

语法

1
2
3
4
5
ls [选项] [文件名...]
[-1abcdfgiklmnopqrstuxABCDFGLNQRSUX] [-w cols] [-T cols] [-I pattern] [--full-time]
[--format={long,verbose,commas,across,vertical,single-col‐umn}]
[--sort={none,time,size,extension}] [--time={atime,access,use,ctime,status}]
[--color[={none,auto,always}]] [--help] [--version] [--]

选项

1
2
3
4
5
6
7
8
9
10
11
12
ls  -a 显示所有文件和目录
-A 显示所有文件和目录,不包括.和..
-l 以长格式显示详细信息
-d 列出目录本身的信息
-h 以人性化的格式显示容量大小
-i 显示inode号
-R 递归查看目录下所有文件与目录
-X 按文件扩展名排序
-S 根据文件大小降序排序
-s 查看文件块大小
-t 根据时间新旧降序排序
-r 将排序方式反过来

ls回显解释

有些文件权限后有一个.,表示这个文件受selinux保护

参数

目录:指定要显示列表的目录,也可以是具体的文件,空表示当前目录。

示例

1
2
3
4
5
6
$ ls       # 仅列出当前目录可见文件
$ ls -l # 列出当前目录可见文件详细信息
$ ls -hl # 列出详细信息并以可读大小显示文件大小
$ ls -al # 列出所有文件(包括隐藏)的详细信息
$ ls --human-readable --size -1 -S --classify # 按文件大小排序
$ ls -ld /etc/ # 显示文件夹信息

5.2 cd命令

切换用户当前工作目录。

语法

1
cd (选项)(参数)

选项

1
2
3
-L (默认值)如果要切换到的目标目录是一个符号连接,那么切换到符号连接的目录。
-P 如果要切换到的目标目录是一个符号连接,那么切换到它指向的物理位置目录。
- 当前工作目录将被切换到环境变量OLDPWD所表示的目录,也就是前一个工作目录。

参数

dir(可选):指定要切换到的目录。

示例

1
2
3
4
5
6
7
8
9
10
11
12
$ pwd         显示当前工作目录

# 改变到一个绝对路径
$ cd /home/zhoumx

# 改变到一个相对路径
$ cd project/docs

$ cd .. 改变到上层目录
$ cd - 改变目录到上一个工作目录
$ cdcd ~ 改变到当前用户的家目录
$ cd ~username 改变到指定用户的家目录

5.3 touch命令

touch命令 有两个功能:

  • 1、创建新的空文件;

  • 2、把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来。

语法

1
touch(选项)(参数)

选项

1
2
3
4
touch   创建文件、更新文件时间戳(stat命令查看时间戳)
-a 更新访问时间access
-m 更新修改时间modify
-d 指定更新时间的格式

参数

文件:指定要设置时间属性的文件列表。

示例

1
$ touch ex2

在当前目录下建立一个空文件ex2,然后,利用ls -l命令可以发现文件ex2的大小为0,表示它是空文件。

5.4 mkdir命令

mkdir命令 用来创建目录。该命令创建由dirname命名的目录。如果在目录名的前面没有加任何路径名,则在当前目录下创建由dirname指定的目录;如果给出了一个已经存在的路径,将会在该目录下创建一个指定的目录。在创建目录时,应保证新建的目录与它所在目录下的文件没有重名。

注意:在创建文件时,不要把所有的文件都存放在主目录中,可以创建子目录,通过它们来更有效地组织文件。最好采用前后一致的命名方式来区分文件和目录。例如,目录名可以以大写字母开头,这样,在目录列表中目录名就出现在前面。

在一个子目录中应包含类型相似或用途相近的文件。例如,应建立一个子目录,它包含所有的数据库文件,另有一个子目录应包含电子表格文件,还有一个子目录应包含文字处理文档,等等。目录也是文件,它们和普通文件一样遵循相同的命名规则,并且利用全路径可以唯一地指定一个目录。

语法

1
mkdir (选项)(参数)

选项

1
2
3
mkdir   创建目录
-p 递归创建目录
-v 显示过程

参数

目录:指定要创建的目录列表,多个目录之间用空格隔开。

示例

1
2
3
4
5
# 在目录/usr/meng下建立子目录test
$ mkdir /usr/meng/test

# 当前目录下递归创建test/tt/1目录
$ mkdir -p test/tt/1

5.5 cp命令

cp命令 用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。

语法

1
cp(选项)(参数)

选项

1
2
3
4
5
6
7
8
cp      拷贝文件或目录
-a 复制文件或目录的内容、权限、属性信息
-p 复制文件或目录的内容、权限信息
-r 递归拷贝,复制目录下所有子目录及文件
-i 覆盖前询问
-v 显示过程
-l 不拷贝文件,只生成链接文件
-f 如果有已存在的目标文件且无法打开,则将其删除并重试

参数

  • 源文件:制定源文件列表。默认情况下,cp命令不能复制目录,如果要复制目录,则必须使用-R选项;
  • 目标文件:指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录。

示例

1
2
3
4
5
6
7
8
9
10
11
# 将/etc/fstab文件复制到当前目录
$ cp /etc/fstab .

# 复制目录aaa下所有到/bbb目录下,这时如果/bbb目录下有和aaa同名的文件,需要按Y来确认并且会略过aaa目录下的子目录。
$ cp aaa/* /bbb

# 这次依然需要按Y来确认操作,但是没有忽略子目录。
$ cp -r aaa/* /bbb

# 将当前目录下所有文件,复制到当前目录的兄弟目录 backup 文件夹中,强制复制目录到指定目录中覆盖已存在文件
$ cp -rf ./* ../backup

5.6 mv命令

mv命令 用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。source表示源文件或目录,target表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖。

注意事项:mv与cp的结果不同,mv好像文件“搬家”,文件个数并未增加。而cp对文件进行复制,文件个数增加了。

语法

1
mv(选项)(参数)

选项

1
2
3
4
5
6
mv      移动或重命名文件
-b 覆盖前备份
-u 覆盖前先比较文件新旧,源文件新则覆盖
-f 强制覆盖
-i 覆盖前询问
-v 显示过程

参数

  • 源文件:源文件列表。
  • 目标文件:如果“目标文件”是文件名则在移动文件的同时,将其改名为“目标文件”;如果“目标文件”是目录名则将源文件移动到“目标文件”下。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 将目录/usr/men中的所有文件移到当前目录(用.表示)中:
$ mv /usr/men/* .

# 移动文件
$ mv file_1.txt /home/office/

# 移动多个文件
$ mv file_2.txt file_3.txt file_4.txt /home/office/
$ mv *.txt /home/office/

# 移动目录
$ mv directory_1/ /home/office/

# 重命名文件或目录
$ mv file_1.txt file_2.txt # 将文件file_1.txt改名为file_2.txt

5.7 rm命令

rm 命令 可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。

注意:使用rm命令要格外小心。因为一旦删除了一个文件,就无法再恢复它。所以,在删除文件之前,最好再看一下文件的内容,确定是否真要删除。rm命令可以用-i选项,这个选项在使用文件扩展名字符删除多个文件时特别有用。使用这个选项,系统会要求你逐一确定是否要删除。这时,必须输入y并按Enter键,才能删除文件。如果仅按Enter键或其他字符,文件不会被删除。

语法

1
rm (选项)(参数)

选项

1
2
3
4
5
rm      删除文件或目录
-r 递归删除目录及其子目录与文件
-f 强制删除
-i 删除前询问
-v 显示过程

参数

文件:指定被删除的文件列表,如果参数中含有目录,则必须加上-r或者-R选项。

示例

1
2
3
4
5
6
7
8
9
10
11
12
# 交互式删除当前目录下的文件test和example
$ rm -i test example
Remove test ?n(不删除文件test)
Remove example ?y(删除文件example)

# 静默式删除当前目录下的文件test和example
$ rm -f test example

# 删除目录
# rm -r [目录名称] -r 表示递归地删除目录下的所有文件和目录。 -f 表示强制删除
rm -rf testdir
rm -r testdir

5.8 cat命令

显示文件内容,连接多个文件并打印到标准输出。

语法

1
cat (选项) (参数)

选项

1
2
3
4
5
6
cat     查看文件
-n 显示行号
-b 只对非空行编行号显示
-s 多个空行连续时只显示一行
-E 在每行结束处显示$(常用来查看行尾是否有空格等特色字符)
-A 等价于vET,显示不可打印字符

参数

FILE(可选):要处理的文件,可以为一或多个。

示例

1
2
3
4
5
# 打印1.log文件内容
$ cat 1.log

# 合并显示多个文件
cat ./1.log ./2.log ./3.log

5.9 head命令

显示文件的开头部分,在未指定行数时默认显示前10行。

语法

1
head (选项) (参数)

选项

1
2
3
4
5
6
7
8
9
head  默认显示文件开头前10行
-n 指定显示文件前n行
-c 指定显示文件前n个字节
-q 隐藏文件名
-v 显示文件名

head -n 3 显示文件前3行
head -n +3 显示文件前3行
head -n -3 显示文件除去最后3行的所有内容

参数

FILE(可选):要处理的文件,可以为一或多个。

示例

1
2
# 查看历史文件的前6行:
$ head -n 6 ~/.bash_history

5.10 tail命令

在屏幕上显示指定文件的末尾若干行,默认在屏幕上显示指定文件的末尾10行。

语法

1
tail (选项) (参数)

选项

1
2
3
4
5
6
7
8
9
10
tail    默认显示文件后10行
-n 指定显示文件后n行
-c 指定显示文件后n个字节
-q 隐藏文件名
-v 显示文件名
-f 循环读取,常用来查看动态日志

tail -n 3 显示文件后3行
tail -n -3 显示文件后3行
tail -n +3 从第3行开始显示文件

参数

文件列表:指定要显示尾部内容的文件列表。

示例

1
2
3
4
5
6
7
8
#(显示文件file的最后10行)
$ tail file

#(显示文件file的内容,从第20行至文件末尾)
$ tail -n +20 file

# 显示 mail.log 最后的 25 行
$ tail -25 mail.log

5.11 more命令

显示文件内容,每次显示一屏。

more命令 是一个基于vi编辑器文本过滤器,它以全屏幕的方式按页显示文本文件的内容,支持vi中的关键字定位操作。more名单中内置了若干快捷键,常用的有H(获得帮助信息),Enter(向下翻滚一行),空格(向下滚动一屏),Q(退出命令)。

该命令一次显示一屏文本,满屏后停下来,并且在屏幕的底部出现一个提示信息,给出至今己显示的该文件的百分比:–More–(XX%)可以用下列不同的方法对提示做出回答:

  • Space 键:显示文本的下一屏内容。
  • Enter 键:只显示文本的下一行内容。
  • 按斜线符|:接着输入一个模式,可以在文本中寻找下一个相匹配的模式。
  • 按H键:显示帮助屏,该屏上有相关的帮助信息。
  • 按B键:显示上一屏内容。
  • 按Q键:退出more命令。

语法

1
more(语法)(参数)

选项

1
2
3
4
5
6
7
more    查看文件
+/string 搜索字符串,从该字符串前两行开始显示
+10 从第10行开始显示
-d:显示“[press space to continue,'q' to quit.]”和“[Press 'h' for instructions]”;
-n 10 定义翻页大小为10行(n可省)
-c 从顶部清屏,然后开始显示
-s 多个空行连续时只显示一行

参数

文件:指定分页显示内容的文件。

示例

1
2
3
4
5
# 显示文件file的内容,但在显示之前先清屏,并且在屏幕的最下方显示完成的百分比。
$ more -dc file

# 显示文件file的内容,每10行显示一次,而且在显示之前先清屏。
$ more -c -10 file

快捷键

操作键 功能
Enter 向下移一行
空格 向下翻一页
Ctrl+b/f 向上/下翻一页
b/f 向上翻一页/向后翻2页
u/d 无效果/后翻半页
PgUp/PgDn 向上/下翻页
= 显示当前行号
v 调用Vim编辑器
调用shell执行命令
q 退出

5.12 less命令

分屏上下翻页浏览文件内容。

less命令 的作用与more十分相似,都可以用来浏览文字档案的内容,不同的是less命令允许用户向前或向后浏览文件,而more命令只能向前浏览。用less命令显示文件时,用PageUp键向上翻页,用PageDown键向下翻页。要退出less程序,应按Q键。

语法

1
less(选项)(参数)

选项

1
2
3
4
5
6
less    查看文件
+/string 搜索字符串,从该字符串前两行开始显示
+10 从第10行开始显示
-n 10 定义翻页大小为10行(n可省)
-c 从顶部清屏,然后开始显示
-s 多个空行连续时只显示一行

参数

文件:指定要分屏显示内容的文件。

示例

1
$ less /var/log/shadowsocks.log

快捷键

操作键 功能
Enter 向下移一行
空格 向下翻一页
Ctrl+b/f 向上/下翻一页
b/f 向上翻一页/向后翻1页
u/d 向前/后翻半页
PgUp/PgDn 向上/下翻页
= 显示当前行号
v 调用Vim编辑器
调用shell执行命令
q 退出
向上搜索
/ 向下搜索
n 往搜索的方向重复查看搜索结果
N 往搜索的方向反向重复查找搜索结果

以上是关于 Linux 文件系统的相关概念以及用于管理文件、目录的一些常用命令。提供的命令选项仅包含常用选项,而非所有选项。你可以通过在命令行中输入 命令 --help 来查看所有可用选项。

在这里给大家推荐一个常用的Linux命令查询网站:https://linux.zhoumx.net


Linux系统管理入门:文件系统组成及常用命令详解
https://www.zhoumx.net/Linux系统管理入门:文件系统组成及常用命令详解.html
作者
阿星
发布于
2023年12月8日
许可协议