Linxu基本操作
Linxu基本操作
1 Linux文件系统
文件系统(File System)是操作系统中负责管理存储设备(如硬盘、SSD、USB闪存盘等)上数据和元数据的结构或机制。它为用户和程序提供了一个抽象层,使得数据的存取、检索、更新和删除等操作变 得简单而有效。文件系统不仅负责存储文件本身的数据,还存储了关于文件的信息,如文件名、创建时 间、修改时间、大小、权限(谁可以读、写或执行该文件)以及文件在存储设备上的位置等。
文件系统的主要功能和特点包括:
1.数据存储:文件系统负责将数据以文件的形式存储在物理设备上。
2**.数据组织**:通过目录(也称为文件夹)和子目录结构来组织文件,使得用户能够方便地找到和管理
文件。
3.提供接口:为操作系统和应用程序提供了一套标准的接口(如API),用于文件的创建、删除、读
取、写入、移动和复制等操作。
4.安全性:通过权限控制来保护文件,确保只有授权的用户或程序才能访问特定的文件。
5.错误恢复:大多数现代文件系统都包含错误检测和恢复机制,以确保数据的一致性和完整性。
不同的操作系统支持不同的文件系统类型,例如:
**Windows:**常见的文件系统有FAT(File Allocation Table)、NTFS(New Tech nology File System)
和exFAT(Extended File Allocation Table)。
Linux/Unix:常见的文件系统有EXT(Extended File System)、EXT2、EXT3、EXT4、XFS、Btrfs、
JFS、ReiserFS以及网络文件系统NFS(Network File System)等。
**macOS:**主要使用HFS+(Hierarchical File System Plus)和较新的APFS(Apple File System)。
inux文件系统采用树形结构,所有文件和目录都位于根目录下的子目录中
linux系统下的文件组织方式是以**/根目录**开始
- 绝对路径:(从根目录开始的路径)以/的开头的就是绝对路径
- 可以使用**/表示根目录**,起点是固定的 /根目录
- 相对路径:(不从根目录开始的路径)
- 相对路径可以把任何一个目录作为起点,路径里使用…进入上层目录),路径里 使用.表示当前目录),起点不是固定的。
wanfeng@wanfeng-virtual-machine:~$
- 当前用户名@当前系统名:当前工作路径$
- wanfeng:当前的用户名
- @ :分割符
- wanfeng-virtual-machine :当前系统名
- : :分割符
- ~ :当前工作路径
- $ :分割符
~ :家目录,表示当前用户的目录。在此目录下,当前用户是非常高的权限。
注意:可以通过#和 来区分此时是超级用户还是普通用户, 来区分此时是超级用户还是普通用户, 来区分此时是超级用户还是普通用户,表示普通用户,#表示超级用户
2 vi编辑器
vi是linux系统里用来记录文字信息的工具
vi只能在终端窗口里使用(不能使用鼠标)
vim是vi进阶版。
vi 编辑器主要有三种模式:
命令模式(Command Mode):这是 vi 的默认模式,用户可以在这个模式下使用快捷键来执行命 令,如移动光标、删除文本、复制粘贴等。
比如创建a.cpp,直接 vi a.cpp,
命令->插入 i
x : 删除光标所在位置的字符
dd :delete 删除光标所在行
ndd : number delete 。n在这里是一个数字,表示删除包括光标所在行及往下n行的内容。并且
把删除的内容保存在剪切板
p : print 将剪切板中的内容粘贴到当前行的后面
P : Print 将剪切板中的内容粘贴到当前行的前面
yy :复制当前行,把当前行的内容拷贝到剪切板中
r : replace 替换光标所在的那一个字符,按下r在找要替换的字符
R :替换光标及之后的多个字符,(按下esc退出替换模式)
u : undo 撤销操作
插入模式(Insert Mode):在命令模式下,用户可以通过输入i 、a、o等命令进入插入模式,在这个模式下可以像使用普通文本编辑器一样输入文本。
插入->命令 Esc
末行模式(Last Line Mode):也被称为命令行模式或Ex模式,用户可以通过在命令模式下按:(冒 号)进入此模式。在这个模式下,用户可以执行一些高级命令,如搜索文本、保存文件、退出vi等。
命令 ->末行 按:
末行->命令 删除:
- :q : quit 退出 只有在没有进行修改的情况下,才能正常退出(如果有修改文件内容,退出的时候进行询问/提示)
- :q! :强制退出,不保存
- :wq :write quit 保存并退出
- :w :write 写入/保存
- :x : 保存并退出
- : /需要搜索的内容
- n :next 找到下一个匹配的内容
- N :找到上一个匹配的内容
- : set nu显示行
vi编译器编译执行
g++ c.cpp -o c./c
3 文件的元数据
元数据(Metadata)是描述数据的数据(data about data),主要是描述数据属性的信息。
元数据用来描述文件的特征,如访问权限、文件拥有者、文件数据块的分布信息(如inode号)等。
inode是文件的身份证号
Window是通过文件扩展名区分文件类型,Linux文件类型和扩展名无关,取决于创建时候的文件类型,创建时候是什么类型就是什么类型,修改后缀名类型不变
-
查看文件的元数据
ls -l -rw-rw-r-- 1 -rw-rw-r-- 1 wanfeng wanfeng 86 5月 3 14:15 c.cpp
- 第一个字符(-)表示这是一个普通文件(其他可能的字符包括d表示目录,l表示软链接、以及其他用户的权限。
- 接下来的三组字符分别表示文件所有者的权限(read, write, execute)、文件所属组的权
- 在这个例子中,rw-表示**文件所有者(**wanfeng)有读(r)和写(w)权限,但没有执行 (x)权限。
- 第二个rw-表示与文件所有者同组的用户(wanfeng组)也有读(r)和写(w)权限,但没 有执行(x)权限。
- 最后的r–表示其他所有用户只有读(r)权限,没有写(w)和执行(x)权限。
怎么区分呢?举个例子:王者登录:你有三个账号你的qq 你的wx 你同学账号
文件所有者:qq (你用 QQ 账号创建了一个文件,所以 QQ 是文件所有者)
文件所有组:假设你创建了一个名为 mygroup
的组,并将 QQ 和微信账号都添加到了这个组中。那么 mygroup
就是文件的所有组
其他所有用户:同学账号(不在 QQ 和 mygroup
组中的其他用户)
说白了文件所有组就是你创建的用户组,可以将多个用户添加到这个组中。
在Linux中,您可以使用 chmod 命令来修改文件或目录的权限。 chmod 命令允许您指定谁(文件所有 者、所属组成员、其他用户)可以对文件或目录执行什么操作(读®、写(w)、执行(x))
chmod [选项] 权限 文件名
符号模式:使用
u (用户,即文件所有者)、g(组)、o(其他用户)和a(所有用户)来表示权限
的类别,使用+(添加权限)、-(移除权限)、=(设置权限)来表示操作。
例如,给文件所有者添加执行权限:
chmod u+x 文件名
给 c.cpp文件其他用户(o)添加(+)可写(w)权限
chmod o+w c.cpp
-rw-rw-rw- 1 wanfeng wanfeng 86 5月 3 14:15 c.cpp
数字模式:使用三个数字来表示权限,每个数字代表一类用户的权限(所有者、组、其他用户)。每个
数字是读(4)、写(2)和执行(1)权限之和。
例如,设置文件权限为所有者可以读写执行(7),组用户可以读执行(5),其他用户可以读(4):
chmod 754 文件名
举个例子:
-rwxrwxr-x 1 wanfeng wanfeng 16520 5月 3 14:15 c
chmod 666 c
-rw-rw-rw- 1 wanfeng wanfeng 86 5月 3 14:15 c.cpp
1
:这个数字表示该文件或目录的硬链接数。在这个例子中,test.cpp
文件有一个硬链接,即它本身。如果这个数字大于1,那么意味着还有其他的文件名链接到了这个文件的内容。
wanfeng(第一个)
:这是文件所有者的用户名。在这个例子中,文件所有者是wanfeng。
wanfeng(第二个)
:这是文件所属组的名称。在这个例子中,文件属于wanfeng组。
86
:这个数字表示文件的大小,单位是字节(byte)。
5月 3 14:15
:这部分表示文件的最后修改时间。在这个例子中,文件test.cpp 最后一次被修改的时间是8月22日的13时43分。注意,时间的显示格式可能会根据系统的区域设置而有所不同。
test.cpp
:这是文件的名称。
inode号是一个指向inode数据结构的指针或索引。这个inode数据结构包含了文件或目录的所有元数据信息。
当操作系统需要访问一个文件或目录时,它会首先根据文件名找到对应的inode号,然后通过inode号访问inode数据结构,从而获取文件或目录的元数据信息。
每个inode号在文件系统中都是唯一的,它确保了每个文件或目录都有一个唯一的标识。这种唯一性使 得文件系统能够准确地管理和访问大量的文件和目录,而不会发生混淆。
- 查看文件inode号
ls -i 文件名
ls -i c.cpp
807512 c.cpp
表面上,用户通过文件名打开文件。实际上系统通过inode节点信息,找到该文件数据存储的硬盘区域,读出数据。
4 链接
在Linux文件系统中,链接是指两个或多个文件或目录之间的连接关系,它允许一个文件或目录通过不同的路径名被访问。通过文件的inode号实现。(可以粗略把文件名inode理解为指针,文件数据认为是空 间)
4.1 软链接(Soft Link)
或者叫符号链接(Symbolic Link)
软链接类似于Windows中的快捷方式。
它本身是一个特殊的文件(Linux万物都是文件),其中包含了另一个文件或目录的路径 信息。当访问软链接时,系统会解析这个路径并访问指向的文件或目录。
- 文件A和文件B inode节点虽然不一样,但是文件A的内容就是文件B的路径
- 读取文件A的时候,系统会自动将访问者导向文件B
- 因此,无论打开文件A还是打开文件B,最终读取到的内容都是文件B的内容
- 这种时候/情况,文件A称为文件B的软链接 (soft Link)
- 意味着文件A指向了文件B,删除文件A是不会对文件B有影响的,但是如果删除文件B就会对文件A产生影响,文件A无法打开(找不到路径对应的内容了)
语法:
ln -s 源文件 软连接文件名
ln -s ./code soft_code
!
注意:
软链接可以指向目录,而硬链接不能。
软链接可以跨文件系统创建,即可以链接到不同文件系统中的文件或目录。
不要在共享目录下使用,因为window没有链接文件
4.2 硬链接(Hard Link)
硬链接通过文件系统中的索引节点(inode)来实现。在Linux中,每个文件都有一个唯一的inode号, 它是文件在磁盘上的元数据标识。硬链接允许多个文件名指向同一个inode号,即多个文件名可以引用 同一个文件的内容。
- 一般情况下,文件名和inode节点是一一对应的关系,也就是每一个inode节点对应一个文件名
- 但是linux系统允许多个文件名指向同一个inode节点,意味着可以用不同的文件名访问相同的内容
- 对于这个文件内容的进行修改,会影响其他文件名访问那个文件内容,但是删除一个文件名,不影响其他文件名的使用的。这个链接称为硬链接 (hard link)
为什么呢,因为Linux多个文件可以拥有多个inode号,系统会统计使用inode号认识
增加一个+1.删除1个-1,为0才会把inode号回收
语法:
ln 源文件 硬连接文件名
为源文件创建一个硬链接 指向inode (目标文件指向源文件的inode)
硬链接的inode和链接的文件一样。
- 文件本身就是硬链接,创建一个稳健硬链接+1,删除硬链接-1.文件复制不会添加硬链接
- 当创建一个文件的硬链接时,文件系统并不会复制文件的内容,而是会在目录中创建一个新的目录项,该目录项指向与原始文件相同的inode号。
- 因此,硬链接并不是文件内容的复制,而是文件名的别名。对硬链接文件的修改会直接影响到原始文件,因为它们都指向同一个inode和文件数据。
注意:
- 硬链接只能对文件进行链接,不能对目录进行链接。
- 硬链接不能跨文件系统创建,即不能链接到不同文件系统中的文件
- 文件复制:文件复制会创建一个全新的文件,拥有自己的 inode 和数据块。修改复制后的文件不会影响原始文件,因此原来文件的硬链接数不会增加