文件
绪言
在Linux操作系统中秉持着一切皆文件的原则,在windows中是文件的,在Linux下也是文件;在Windows中不是文件的,在Linux下同样是文件,它意味着各种设备、资源和数据都可以通过文件系统的方式进行访问和操作。最常见的例子便是用U盘插入电脑中读取信息,在Linux系统中
/dev/sdX
:这个文件表示U盘设备,”X”代表具体的设备标识,例如/dev/sda
、/dev/sdb
等。你可以通过这个文件来访问整个U盘。1
2sudo mkdir /media/usb-drive
sudo mount /dev/sdX /media/usb-drive/media/username/usb-drive
:这个文件夹是U盘挂载的地方,”username”是你的用户名,”usb-drive”是挂载点。在这个文件夹中,你可以通过普通的文件操作来访问U盘中的文件和文件夹。
而在windows操作系统下,U盘通常会被视为两个不同的实体:一个是设备,另一个是文件系统中的一个文件夹
- 设备:可以在Windows设备管理器中看到,通常显示为一个可移动设备。
- 文件夹:windows会自动为U盘分配一个盘符,可以用过windows资源管理器访问U盘内的文件。
Linux下的文件目录结构
以Ubuntu 22.04 LTS 为例,输入ll / -a
查看/
目录下的文件目录:
- 常见的目录:
/
(根目录): Linux文件系统的根目录,所有其他目录都是从这里开始的。/bin
(基本命令): 全称binary
,存放系统启动和维护所需的基本命令,如ls
、cp
、mv
等。/boot
(开机引导): 存放包含引导启动Linux系统所需的文件,如内核映像文件、引导加载程序以及启动配置文件。/dev
(设备文件): 包含与系统硬件设备和外部设备的文件,Linux将这些设备抽象为文件,通过这些文件来进行访问和交互。在其中的外接设备是不能直接被使用的,需要挂载(类似windows下的分配盘符)。/etc
(系统配置): 存放系统的配置文件,包括网络配置、用户账户配置、软件配置等。/home
(用户主目录): 存放用户的主目录,每个用户都有一个独立的子目录,用于存放个人文件、文档和配置文件。/root
(root用户主目录): 超级用户(root用户)的主目录。/run
(运行时数据): 用于存放系统启动后运行时需要的临时文件,即进程的运行数据存放目录。/sbin
(系统命令): 存放系统管理员使用的系统管理命令,这些命令通常需要root权限,如fdisk
、iptables
等。/tmp
(临时文件): 用于存放临时文件,系统重新启动后会清空该目录。/usr
(用户目录):包含用户程序和文件,通常将大部分软件安装到这个目录下。/usr/bin
: 存放系统中的大部分用户级别的可执行命令。这些命令通常是系统的标准工具和应用程序,但不是必须在系统启动阶段使用的基本命令。/usr/local
:程序安装目录。/usr/sbin
:存放系统管理员(root用户)使用的系统管理命令。与/sbin
目录类似,但/usr/sbin
中的命令通常是不需要在系统启动阶段使用的,因此可以被认为是更为次要的系统命令。/usr/tmp
:被抛弃临时文件目录。/usr/lib
,/usr/lib32
,/usr/lib64
,/usr/libx32
: 存放系统所需的共享库文件,这些库文件被可执行文件在运行时动态链接以实现代码重用。/usr/src
:是用于存放内核源代码(Linux 内核)的目录。这个目录通常包含了系统所使用的内核版本的源代码,以及相关的文件和文档。
/var
(变量数据): 包含变量数据,如日志文件、数据库文件等会变化的数据。/var/tmp
:临时文件目录;存放周期更长
- 其他命令:
/media
和/mnt
(挂载点): 通常用于挂载外部设备,如U盘、光盘等,这样的设备会在这些目录下创建子目录以便访问。/opt
(可选软件): 用于存放由第三方提供的附加软件,通常将这些软件安装在这个目录下。/proc
(进程信息): 虚拟文件系统,提供有关正在运行的进程和系统状态的信息,以文件的形式呈现。/srv
(服务数据): 用于存放系统提供的服务的数据文件,如Web服务器的文档。/sys
(内核文件): 用于访问内核的运行时信息,以及与内核模块的交互。/snap
(包管理器):是用于存放使用 Snap 包管理器安装的应用程序和软件包的目录。
文件路径
在 Linux 操作系统中,文件路径是用来描述文件在文件系统中位置的字符串。Linux 的文件路径是一个层次化的结构,从根目录开始,通过目录名和斜杠(/)来指示文件的位置。
- 绝对路径: 绝对路径从根目录开始,指示完整的路径。例如:
/usr/bin
:指向根目录下的/usr/bin
目录。/home/user/documents/file.txt
:指向根目录下的/home/user/documents
目录中的file.txt
文件。
- 相对路径: 相对路径是相对于当前工作目录的路径。例如,如果当前工作目录是
/home/user
,那么:documents/file.txt
:指向/home/user/documents
目录中的file.txt
文件。
- 特殊符号: 在路径中,一些特殊符号有特殊的含义:
.
:代表当前目录。例如:./file.txt
表示当前目录中的file.txt
文件。..
:代表上一级目录。例如:../folder/file.txt
表示上一级目录中的folder
目录下的file.txt
文件。~
:代表当前用户的主目录。例如:~/documents
表示当前用户的主目录下的documents
目录。
- 环境变量: 有些路径中可能包含环境变量,例如
$HOME
代表当前用户的主目录。例如:$HOME/documents
表示主目录下的documents
目录。
文件命名规则
常见的 Linux 文件命名规则:
- 大小写敏感: Linux 文件系统是大小写敏感的。例如,
file.txt
和File.txt
被认为是两个不同的文件。 - 字母、数字和下划线: 文件名可以包含字母(大小写)、数字和下划线字符。文件名不能以数字开头。
- 连字符和点: 文件名中可以包含连字符(减号,短划线)和点(句点),但不能以它们开头或结尾。连字符通常用于分隔单词,而点通常用于文件名的扩展名。
- 扩展名: Linux 中的文件命名并不像 Windows 那样依赖于扩展名来识别文件类型。文件名可以没有扩展名,也可以使用任何合法的字符作为扩展名。
- 保留字符: Linux 文件名中不能包含特殊的保留字符,如斜杠(/)、问号(?)等。
- 长度限制: 文件名的最大长度为 255 个字符。
注意:
- 以
.
开头的文件名是隐藏文件,使用ls
命令时要添加命令选项-a
方可查看。
- 虽说Linux可以使用特殊字符作为文件名,但一般不推荐使用特殊字符。
例如:用 (空格)当作文件名;在Ubuntu下系统会以引号显示该文件,但有的Linux版本可能会直接不显示该文件。文件名的含义尽量给文件命名以反映其内容、用途或功能,以便其他人能够轻松理解和识别文件。
1 | exiler@localhost:~$ touch ' ' |
命令
Linux是一种类Unix操作系统,近些年来Linux的桌面版本层出不穷,一定程度上极大简化了Linux的个人使用。面对server等版本,掌握shell终端命令的使用可以更加方便快速的操作Linux。
目录操作命令
查看路径
pwd
查看当前路径,Print Working Directory的缩写
1 | exiler@localhost:~$ pwd |
创建目录
mkdir
一次建立一个或几个目录
1 | exiler@localhost:~$ mkdir document picture #新建目录 |
创建子目录默认为为已存在的目录创建子目录,若想要完整地创建一个不存在目录结构,请使用mkdir -p
指令:
1 | exiler@localhost:~$ mkdir ~/tempx/job #error |
移动目录
mv
move的缩写,可以用来移动文件,也可以用于重命名文件
1 | mv source destination |
若source文件与的destination目录下的某个文件存在文件名相同的情况,则mv命令会不发出警告地把destination目录下的同名文件替换,导致某些重要文件丢失。
1 | exiler@localhost:~$ mkdir ~/test && cd test |
为了杜绝此类情况,可以使用mv -i
选项:
1 | exiler@localhost:~$ ls |
也可以使用mv -b
选项给source文件名添加字符~
避免被覆盖:
1 | exiler@localhost:~$ touch "hello" |
- 重命名
Linux中并没有专门用来重命名的命令,因为mv命令可以轻松实现文件重命名
例如,如果要将文件 “oldname.txt” 重命名为 “newname.txt”,你可以使用以下命令:
1 | mv oldname.txt newname.txt |
删除目录
rmdir
用来删除空目录,后跟要删除的空目录名即可。rm
用来删除文件
rm命令的使用方式较多,可以一次删除一个或几个文件,也可以用来删除目录。
1 | rm test/*.php #删除test目录下的所有php文件 |
为了安全起见,使用rm -i
命令系统会发出请求等待用户是否确定删除文件
1 | exiler@localhost:~$ rm -i hello |
使用rm -f
可以避免这样的交互操作,rm
命令会自动对这些文件回答y,一般-f
选项都是配合-r
选项使用删除整个目录。
- 使用
rm -r
递归删除整个目录:
rm -r
命令会递归删除一个目录下的所有文件和子目录下的文件,最后再删除选中的目录。使用该命令时要格外小心,特别是以root身份执行该命令。
复制目录
cp
1 | cp source destination |
和mv
命令一样,cp
默认情况下会也会覆盖目标目录中的同名文件。
- 可以使用-i选项对这种情况进行提示.
- 可以使用-b选项对同名文件改名后再复制。这两个选项的使用和mv命令中一样。
1 | cp test.php test/ |
跳转目录
cd
命令可以用来切换工作目录,Change Directory的缩写.
1 | cd ../ #返回上级目录 |
使用cd
命令时要注意区分相对路径和绝对路径的使用。