范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

全面剖析Linux文件系统

  在 Linux 中,最直观、最可见的部分就是  文件系统(file system)  。下面我们就来一起探讨一下关于 Linux 中国的文件系统,系统调用以及文件系统实现背后的原理和思想。这些思想中有一些来源于 MULTICS,现在已经被 Windows 等其他操作系统使用。Linux 的设计理念就是 小的就是好的(Small is Beautiful)   。虽然 Linux 只是使用了最简单的机制和少量的系统调用,但是 Linux 却提供了强大而优雅的文件系统。Linux 文件系统基本概念
  Linux 在最初的设计是 MINIX1 文件系统,它只支持 14 字节的文件名,它的最大文件只支持到 64 MB。在 MINIX 1 之后的文件系统是 ext 文件系统。ext 系统相较于 MINIX 1 来说,在支持字节大小和文件大小上均有很大提升,但是 ext 的速度仍没有 MINIX 1 快,于是,ext 2 被开发出来,它能够支持长文件名和大文件,而且具有比 MINIX 1 更好的性能。这使他成为 Linux 的主要文件系统。只不过 Linux 会使用  VFS   曾支持多种文件系统。在 Linux 链接时,用户可以动态的将不同的文件系统挂载倒 VFS 上。
  Linux 中的文件是一个任意长度的字节序列,Linux 中的文件可以包含任意信息,比如 ASCII 码、二进制文件和其他类型的文件是不加区分的。
  为了方便起见,文件可以被组织在一个目录中,目录存储成文件的形式在很大程度上可以作为文件处理。目录可以有子目录,这样形成有层次的文件系统,Linux 系统下面的根目录是  /   ,它通常包含了多个子目录。字符 /   还用于对目录名进行区分,例如 /usr/cxuan 表示的就是根目录下面的 usr 目录,其中有一个叫做 cxuan 的子目录。
  下面我们介绍一下 Linux 系统根目录下面的目录名 /bin  ,它是重要的二进制应用程序,包含二进制文件,系统的所有用户使用的命令都在这里/boot  ,启动包含引导加载程序的相关文件/dev  ,包含设备文件,终端文件,USB 或者连接到系统的任何设备/etc  ,配置文件,启动脚本等,包含所有程序所需要的配置文件,也包含了启动/停止单个应用程序的启动和关闭 shell 脚本/home  ,本地主要路径,所有用户用 home 目录存储个人信息/lib  ,系统库文件,包含支持位于 /bin 和 /sbin 下的二进制库文件/lost+found  ,在根目录下提供一个遗失+查找系统,必须在 root 用户下才能查看当前目录下的内容/media  ,挂载可移动介质/mnt  ,挂载文件系统/opt  ,提供一个可选的应用程序安装目录/proc  ,特殊的动态目录,用于维护系统信息和状态,包括当前运行中进程信息/root  ,root 用户的主要目录文件夹/sbin  ,重要的二进制系统文件/tmp  , 系统和用户创建的临时文件,系统重启时,这个目录下的文件都会被删除/usr  ,包含绝大多数用户都能访问的应用程序和文件/var  ,经常变化的文件,诸如日志文件或数据库等
  在 Linux 中,有两种路径,一种是  绝对路径(absolute path)   ,绝对路径告诉你从根目录下查找文件,绝对路径的缺点是太长而且不太方便。还有一种是 相对路径(relative path)   ,相对路径所在的目录也叫做工作目录(working directory)  。
  如果  /usr/local/books   是工作目录,那么 shell 命令brcp books books-replica
  就表示的是相对路径,而 brcp /usr/local/books/books /usr/local/books/books-replica
  则表示的是绝对路径。
  在 Linux 中经常出现一个用户使用另一个用户的文件或者使用文件树结构中的文件。两个用户共享同一个文件,这个文件位于某个用户的目录结构中,另一个用户需要使用这个文件时,必须通过绝对路径才能引用到他。如果绝对路径很长,那么每次输入起来会变的非常麻烦,所以 Linux 提供了一种  链接(link)   机制。
  举个例子,下面是一个使用链接之前的图
  以上所示,比如有两个工作账户 jianshe 和 cxuan,jianshe 想要使用 cxuan 账户下的 A 目录,那么它可能会输入  /usr/cxuan/A   ,这是一种未使用链接之后的图。
  使用链接后的示意如下
  现在,jianshe 可以创建一个链接来使用 cxuan 下面的目录了。‘
  当一个目录被创建出来后,有两个目录项也同时被创建出来,它们就是  .   和 ..   ,前者代表工作目录自身,后者代表该目录的父目录,也就是该目录所在的目录。这样一来,在 /usr/jianshe 中访问 cxuan 中的目录就是 ../cxuan/xxx
  Linux 文件系统不区分磁盘的,这是什么意思呢?一般来说,一个磁盘中的文件系统相互之间保持独立,如果一个文件系统目录想要访问另一个磁盘中的文件系统,在 Windows 中你可以像下面这样。
  两个文件系统分别在不同的磁盘中,彼此保持独立。
  而在 Linux 中,是支持 挂载  的,它允许一个磁盘挂在到另外一个磁盘上,那么上面的关系会变成下面这样
  挂在之后,两个文件系统就不再需要关心文件系统在哪个磁盘上了,两个文件系统彼此可见。
  Linux 文件系统的另外一个特性是支持  加锁(locking)  。在一些应用中会出现两个或者更多的进程同时使用同一个文件的情况,这样很可能会导致竞争条件(race condition)  。一种解决方法是对其进行加不同粒度的锁,就是为了防止某一个进程只修改某一行记录从而导致整个文件都不能使用的情况。
  POSIX 提供了一种灵活的、不同粒度级别的锁机制,允许一个进程使用一个不可分割的操作对一个字节或者整个文件进行加锁。加锁机制要求尝试加锁的进程指定其  要加锁的文件,开始位置以及要加锁的字节
  Linux 系统提供了两种锁: 共享锁和互斥锁 。如果文件的一部分已经加上了共享锁,那么再加排他锁是不会成功的;如果文件系统的一部分已经被加了互斥锁,那么在互斥锁解除之前的任何加锁都不会成功。为了成功加锁、请求加锁的部分的所有字节都必须是可用的。
  在加锁阶段,进程需要设计好加锁失败后的情况,也就是判断加锁失败后是否选择阻塞,如果选择阻塞式,那么当已经加锁的进程中的锁被删除时,这个进程会解除阻塞并替换锁。如果进程选择非阻塞式的,那么就不会替换这个锁,会立刻从系统调用中返回,标记状态码表示是否加锁成功,然后进程会选择下一个时间再次尝试。
  加锁区域是可以重叠的。下面我们演示了三种不同条件的加锁区域。
  如上图所示,A 的共享锁在第四字节到第八字节进行加锁
  如上图所示,进程在 A 和 B 上同时加了共享锁,其中 6 - 8 字节是重叠锁
  如上图所示,进程 A 和 B 和 C 同时加了共享锁,那么第六字节和第七字节是共享锁。
  如果此时一个进程尝试在第 6 个字节处加锁,此时会设置失败并阻塞,由于该区域被 A B C 同时加锁,那么只有等到 A B C 都释放锁后,进程才能加锁成功。 Linux 文件系统调用
  许多系统调用都会和文件与文件系统有关。我们首先先看一下对单个文件的系统调用,然后再来看一下对整个目录和文件的系统调用。
  为了创建一个新的文件,会使用到  creat   方法,注意没有 e  。
  这里说一个小插曲,曾经有人问 UNIX 创始人 Ken Thompson,如果有机会重新写 UNIX ,你会怎么办,他回答自己要把 creat 改成 create ,哈哈哈哈。
  这个系统调用的两个参数是文件名和保护模式 brfd = creat("aaa",mode);
  这段命令会创建一个名为 aaa 的文件,并根据 mode 设置文件的保护位。这些位决定了哪个用户可能访问文件、如何访问。
  creat 系统调用不仅仅创建了一个名为 aaa 的文件,还会打开这个文件。为了允许后续的系统调用访问这个文件,这个 creat 系统调用会返回一个  非负整数  , 这个就叫做 文件描述符(file descriptor)  ,也就是上面的 fd。
  如果在已经存在的文件上调用了 creat 系统调用,那么该文件中的内容会被清除,从 0 开始。通过设置合适的参数, open   系统调用也能够创建文件。
  下面让我们看一看主要的系统调用,如下表所示
  系统调用
  描述
  fd = creat(name,mode)
  一种创建一个新文件的方式
  fd = open(file, ...)
  打开文件读、写或者读写
  s = close(fd)
  关闭一个打开的文件
  n = read(fd, buffer, nbytes)
  从文件中向缓存中读入数据
  n = write(fd, buffer, nbytes)
  从缓存中向文件中写入数据
  position = lseek(fd, offset, whence)
  移动文件指针
  s = stat(name, &buf)
  获取文件信息
  s = fstat(fd, &buf)
  获取文件信息
  s = pipe(&fd[0])
  创建一个管道
  s = fcntl(fd,...)
  文件加锁等其他操作
  为了对一个文件进行读写的前提是先需要打开文件,必须使用 creat 或者 open 打开,参数是打开文件的方式,是只读、可读写还是只写。open 系统调用也会返回文件描述符。打开文件后,需要使用  close   系统调用进行关闭。close 和 open 返回的 fd 总是未被使用的最小数量。
  什么是文件描述符?文件描述符就是一个数字,这个数字标示了计算机操作系统中打开的文件。它描述了数据资源,以及访问资源的方式。
  当程序要求打开一个文件时,内核会进行如下操作 授予访问权限 在 全局文件表(global file table)  中创建一个条目(entry)  向软件提供条目的位置
  文件描述符由唯一的非负整数组成,系统上每个打开的文件至少存在一个文件描述符。文件描述符最初在 Unix 中使用,并且被包括 Linux,macOS 和 BSD 在内的现代操作系统所使用。
  当一个进程成功访问一个打开的文件时,内核会返回一个文件描述符,这个文件描述符指向全局文件表的 entry 项。这个文件表项包含文件的 inode 信息,字节位移,访问限制等。例如下图所示
  默认情况下,前三个文件描述符为  STDIN(标准输入)  、STDOUT(标准输出)  、STDERR(标准错误)  。
  标准输入的文件描述符是 0 ,在终端中,默认为用户的键盘输入
  标准输出的文件描述符是 1 ,在终端中,默认为用户的屏幕
  与错误有关的默认数据流是 2,在终端中,默认为用户的屏幕。
  在简单聊了一下文件描述符后,我们继续回到文件系统调用的探讨。
  在文件系统调用中,开销最大的就是 read 和 write 了。read 和 write 都有三个参数 文件描述符  :告诉需要对哪一个打开文件进行读取和写入缓冲区地址  :告诉数据需要从哪里读取和写入哪里统计  :告诉需要传输多少字节
  这就是所有的参数了,这个设计非常简单轻巧。
  虽然几乎所有程序都按顺序读取和写入文件,但是某些程序需要能够随机访问文件的任何部分。与每个文件相关联的是一个指针,该指针指示文件中的当前位置。顺序读取(或写入)时,它通常指向要读取(写入)的下一个字节。如果指针在读取 1024 个字节之前位于 4096 的位置,则它将在成功读取系统调用后自动移至 5120 的位置。
  Lseek   系统调用会更改指针位置的值,以便后续对 read 或 write 的调用可以在文件中的任何位置开始,甚至可以超出文件末尾。
  lseek = Lseek ,段首大写。
  lseek 避免叫做 seek 的原因就是 seek 已经在之前 16 位的计算机上用于搜素功能了。
  Lseek   有三个参数:第一个是文件的文件描述符,第二个是文件的位置;第三个告诉文件位置是相对于文件的开头,当前位置还是文件的结尾brlseek(int fildes, off_t offset, int whence);
  lseek 的返回值是更改文件指针后文件中的绝对位置。lseek 是唯一从来不会造成真正磁盘查找的系统调用,它只是更新当前的文件位置,这个文件位置就是内存中的数字。
  对于每个文件,Linux 都会跟踪文件模式(常规,目录,特殊文件),大小,最后修改时间以及其他信息。程序能够通过  stat   系统调用看到这些信息。第一个参数就是文件名,第二个是指向要放置请求信息结构的指针。这些结构的属性如下图所示。
  存储文件的设备
  存储文件的设备
  i-node 编号
  文件模式(包括保护位信息)
  文件链接的数量
  文件所有者标识
  文件所属的组
  文件大小(字节)
  创建时间
  最后一个修改/访问时间
  fstat   调用和 stat   相同,只有一点区别,fstat 可以对打开文件进行操作,而 stat 只能对路径进行操作。
  pipe   文件系统调用被用来创建 shell 管道。它会创建一系列的伪文件  ,来缓冲和管道组件之间的数据,并且返回读取或者写入缓冲区的文件描述符。在管道中,像是如下操作brsort   文件属性、保护位、setuid 和 setgid 位
  Nlinks
  2
  指向 i - node 节点目录项的数目   Uid   2
  文件所有者的 UID   Gid   2
  文件所有者的 GID   Size   4
  文件字节大小   Addr   60
  12 个磁盘块以及后面 3 个间接块的地址   Gen   1
  每次重复使用 i - node 时增加的代号   Atime   4
  最近访问文件的时间   Mtime   4
  最近修改文件的时间   Ctime   4
  最近更改 i - node 的时间   现在我们来一起探讨一下文件读取过程,还记得 read 函数是如何调用的吗?brn = read(fd,buffer,nbytes);   当内核接管后,它会从这三个参数以及内部表与用户有关的信息开始。内部表的其中一项是文件描述符数组。文件描述符数组用 文件描述符 作为索引并为每一个打开文件保存一个表项。   文件是和 i - node 节点号相关的。那么如何通过一个文件描述符找到文件对应的 i - node 节点呢?   这里使用的一种设计思想是在文件描述符表和 i - node 节点表之间插入一个新的表,叫做 打开文件描述符(open-file-description table) 。文件的读写位置会在打开文件描述符表中存在,如下图所示   我们使用 shell 、P1 和 P2 来描述一下父进程、子进程、子进程的关系。Shell 首先生成 P1,P1 的数据结构就是 Shell 的一个副本,因此两者都指向相同的打开文件描述符的表项。当 P1 运行完成后,Shell 的文件描述符仍会指向 P1 文件位置的打开文件描述。然后 Shell 生成了 P2,新的子进程自动继承文件的读写位置,甚至 P2 和 Shell 都不知道文件具体的读写位置。   上面描述的是父进程和子进程这两个 相关 进程,如果是一个不相关进程打开文件时,它将得到自己的打开文件描述符表项,以及自己的文件读写位置,这是我们需要的。   因此,打开文件描述符相当于是给相关进程提供同一个读写位置,而给不相关进程提供各自私有的位置。   i - node 包含三个间接块的磁盘地址,它们每个指向磁盘块的地址所能够存储的大小不一样。 Linux Ext4 文件系统   为了防止由于系统崩溃和电源故障造成的数据丢失,ext2 系统必须在每个数据块创建之后立即将其写入到磁盘上,磁盘磁头寻道操作导致的延迟是无法让人忍受的。为了增强文件系统的健壮性,Linux 依靠 日志文件系统 ,ext3 是一个日志文件系统,它在 ext2 文件系统的基础之上做了改进,ext4 也是 ext3 的改进,ext4 也是一个日志文件系统。ext4 改变了 ext3 的块寻址方案,从而支持更大的文件和更大的文件系统大小。下面我们就来描述一下 ext4 文件系统的特性。   具有记录的文件系统最基本的功能就是 记录日志 ,这个日志记录了按照顺序描述所有文件系统的操作。通过顺序写出文件系统数据或元数据的更改,操作不受磁盘访问期间磁盘头移动的开销。最终,这个变更会写入并提交到合适的磁盘位置上。如果这个变更在提交到磁盘前文件系统宕机了,那么在重启期间,系统会检测到文件系统未正确卸载,那么就会遍历日志并应用日志的记录来对文件系统进行更改。   Ext4 文件系统被设计用来高度匹配 ext2 和 ext3 文件系统的,尽管 ext4 文件系统在内核数据结构和磁盘布局上都做了变更。尽管如此,一个文件系统能够从 ext2 文件系统上卸载后成功的挂载到 ext4 文件系统上,并提供合适的日志记录。   日志是作为循环缓冲区管理的文件。日志可以存储在与主文件系统相同或者不同的设备上。日志记录的读写操作会由单独的 JBD(Journaling Block Device) 来扮演。   JBD 中有三个主要的数据结构,分别是 log record(日志记录)、原子操作和事务 。一个日志记录描述了一个低级别的文件系统操作,这个操作通常导致块内的变化。因为像是 write 这种系统调用会包含多个地方的改动 --- i - node 节点,现有的文件块,新的文件块和空闲列表等。相关的日志记录会以原子性的方式分组。ext4 会通知系统调用进程的开始和结束,以此使 JBD 能够确保原子操作的记录都能被应用,或者一个也不被应用。最后,主要从效率方面考虑,JBD 会视原子操作的集合为事务。一个事务中的日志记录是连续存储的。只有在所有的变更一起应用到磁盘后,日志记录才能够被丢弃。   由于为每个磁盘写出日志的开销会很大,所以 ext4 可以配置为保留所有磁盘更改的日志,或者仅仅保留与文件系统元数据相关的日志更改。仅仅记录元数据可以减少系统开销,提升性能,但不能保证不会损坏文件数据。其他的几个日志系统维护着一系列元数据操作的日志,例如 SGI 的 XFS。 /proc 文件系统   另外一个 Linux 文件系统是 /proc (process) 文件系统   它的主要思想来源于贝尔实验室开发的第 8 版的 UNIX,后来被 BSD 和 System V 采用。   然而,Linux 在一些方面上对这个想法进行了扩充。它的基本概念是为系统中的每个进程在 /proc 中创建一个目录。目录的名字就是进程 PID,以十进制数进行表示。例如,/proc/1024 就是一个进程号为 1024 的目录。在该目录下是进程信息相关的文件,比如进程的命令行、环境变量和信号掩码等。事实上,这些文件在磁盘上并不存在磁盘中。当需要这些信息的时候,系统会按需从进程中读取,并以标准格式返回给用户。   许多 Linux 扩展与 /proc 中的其他文件和目录有关。它们包含各种各样的关于 CPU、磁盘分区、设备、中断向量、内核计数器、文件系统、已加载模块等信息。非特权用户可以读取很多这样的信息,于是就可以通过一种安全的方式了解系统情况。NFS 网络文件系统   从一开始,网络就在 Linux 中扮演了很重要的作用。下面我们会探讨一下 NFS(Network File System) 网络文件系统,它在现代 Linux 操作系统的作用是将不同计算机上的不同文件系统链接成一个逻辑整体。NFS 架构   NFS 最基本的思想是允许任意选定的一些 客户端 和服务器 共享一个公共文件系统。在许多情况下,所有的客户端和服务器都会在同一个 LAN(Local Area Network) 局域网内共享,但是这并不是必须的。也可能是下面这样的情况:如果客户端和服务器距离较远,那么它们也可以在广域网上运行。客户端可以是服务器,服务器可以是客户端,但是为了简单起见,我们说的客户端就是消费服务,而服务器就是提供服务的角度来聊。   每一个 NFS 服务都会导出一个或者多个目录供远程客户端访问。当一个目录可用时,它的所有子目录也可用。因此,通常整个目录树都会作为一个整体导出。服务器导出的目录列表会用一个文件来维护,这个文件是 /etc/exports ,当服务器启动后,这些目录可以自动的被导出。客户端通过挂载这些导出的目录来访问它们。当一个客户端挂载了一个远程目录,这个目录就成为客户端目录层次的一部分,如下图所示。   在这个示例中,一号客户机挂载到服务器的 bin 目录下,因此它现在可以使用 shell 访问 /bin/cat 或者其他任何一个目录。同样,客户机 1 也可以挂载到 二号服务器上从而访问 /usr/local/projects/proj1 或者其他目录。二号客户机同样可以挂载到二号服务器上,访问路径是 /mnt/projects/proj2。   从上面可以看到,由于不同的客户端将文件挂载到各自目录树的不同位置,同一个文件在不同的客户端有不同的访问路径和不同的名字。挂载点一般通常在客户端本地,服务器不知道任何一个挂载点的存在。 NFS 协议   由于 NFS 的协议之一是支持 异构 系统,客户端和服务器可能在不同的硬件上运行不同的操作系统,因此有必要在服务器和客户端之间进行接口定义。这样才能让任何写一个新客户端能够和现有的服务器一起正常工作,反之亦然。   NFS 就通过定义两个客户端 - 服务器协议从而实现了这个目标。协议就是客户端发送给服务器的一连串的请求,以及服务器发送回客户端的相应答复。   第一个 NFS 协议是处理挂载。客户端可以向服务器发送路径名并且请求服务器是否能够将服务器的目录挂载到自己目录层次上。因为服务器不关心挂载到哪里,因此请求不会包含挂载地址。如果路径名是合法的并且指定的目录已经被导出,那么服务器会将文件 句柄 返回给客户端。   文件句柄包含唯一标识文件系统类型,磁盘,目录的i节点号和安全性信息的字段。   随后调用读取和写入已安装目录或其任何子目录中的文件,都将使用文件句柄。   当 Linux 启动时会在多用户之前运行 shell 脚本 /etc/rc 。可以将挂载远程文件系统的命令写入该脚本中,这样就可以在允许用户登陆之前自动挂载必要的远程文件系统。大部分 Linux 版本是支持 自动挂载 的。这个特性会支持将远程目录和本地目录进行关联。   相对于手动挂载到 /etc/rc 目录下,自动挂载具有以下优势 如果列出的 /etc/rc 目录下出现了某种故障,那么客户端将无法启动,或者启动会很困难、延迟或者伴随一些出错信息,如果客户根本不需要这个服务器,那么手动做了这些工作就白费了。 允许客户端并行的尝试一组服务器,可以实现一定程度的容错率,并且性能也可以得到提高。   另一方面,我们默认在自动挂载时所有可选的文件系统都是相同的。由于 NFS 不提供对文件或目录复制的支持,用户需要自己确保这些所有的文件系统都是相同的。因此,大部分的自动挂载都只应用于二进制文件和很少改动的只读的文件系统。   第二个 NFS 协议是为文件和目录的访问而设计的。客户端能够通过向服务器发送消息来操作目录和读写文件。客户端也可以访问文件属性,比如文件模式、大小、上次修改时间。NFS 支持大多数的 Linux 系统调用,但是 open 和 close 系统调用却不支持。   不支持 open 和 close 并不是一种疏忽,而是一种刻意的设计,完全没有必要在读一个文件之前对其进行打开,也没有必要在读完时对其进行关闭。   NFS 使用了标准的 UNIX 保护机制,使用 rwx 位来标示所有者(owner) 、组(groups) 、其他用户 。最初,每个请求消息都会携带调用者的 groupId 和 userId,NFS 会对其进行验证。事实上,它会信任客户端不会发生欺骗行为。可以使用公钥密码来创建一个安全密钥,在每次请求和应答中使用它验证客户端和服务器。NFS 实现   即使客户端和服务器的代码实现是独立于 NFS 协议的,大部分的 Linux 系统会使用一个下图的三层实现,顶层是系统调用层,系统调用层能够处理 open 、 read 、 close 这类的系统调用。在解析和参数检查结束后调用第二层, 虚拟文件系统 (VFS) 层。   VFS 层的任务是维护一个表,每个已经打开的文件都在表中有一个表项。VFS 层为每一个打开的文件维护着一个 虚拟i节点 ,简称为 v - node。v 节点用来说明文件是本地文件还是远程文件。如果是远程文件的话,那么 v - node 会提供足够的信息使客户端能够访问它们。对于本地文件,会记录其所在的文件系统和文件的 i-node ,因为现代操作系统能够支持多文件系统。虽然 VFS 是为了支持 NFS 而设计的,但是现代操作系统都会使用 VFS,而不管有没有 NFS。   如果文章对你有帮助,希望各位小伙伴们交出你的三连呀!

马德兴沙特正式申办2023年世俱杯,目前尚无竞争者直播吧2月9日讯据马德兴报道,沙特足协在2月8日正式向国际足联提出主办2023年的世俱杯,目前尚无其他竞争者。受客观因素影响,最近两届世俱杯都安排在2月份进行,但2023年世俱杯将世俱杯1进决赛与利雅得新月争冠北京时间2月9日凌晨3点,2022世俱杯第二场半决赛在摩洛哥进行,由非洲球队开罗国民对阵欧冠冠军皇家马德里。上半场,维尼修斯打破僵局下半场,巴尔韦德扩大比分,卡马文加送点,马鲁勒为一天入账16亿!如果沙特石油枯竭,会不会穷到吃土?头顶一块布,世界我最富,一天就能入账16亿,靠石油发家的沙特一次次刷新人们对有钱的认知,那不免就人思考了,石油毕竟是不可再生资源,如果有一天沙特地下的石油枯竭,没有了财富密码,他们一线探民生解决停车难丨共治共管,让停车更有序一线探民生解决停车难原标题上海鼓励小区居民通过协商制定停放规则(引题)共治共管,让停车更有序(主题)人民日报记者黄晓慧核心阅读停车难是不少城市小区面临的共性问题,上海部分小区居民探上了年纪之后,喝酒不能再随意!建议大家2喝2不喝要牢记上了点年纪之后似乎身边的阻碍越来越多,由于身体不如从前,无论是工作上还是生活上都渐渐觉得有些力不从心,甚至每当想喝上两杯解解乏时,身边劝诫的声音足以将人淹没,一时间也让人产生这样的韦伯发现90亿年前焰火星系,像早期银河系吞噬周边星团据最新一期皇家天文学会月刊刊发的论文,美国宇航局(NASA)的詹姆斯韦伯太空望远镜发现90亿光年外的一个星系,类似早期银河系,正在吞噬周边球状星团和卫星星系,使其逐渐变大。据报道,新发现挑战恒星初始质量分布规律不变理论近日,自然在线发表了一项关于恒星初始质量分布规律的重要进展。基于郭守敬望远镜(LAMOST)的超大样本光谱数据和欧洲空间局盖亚(Gaia)卫星数据,我国天文学家发现,随着恒星金属元CBA空前大闹剧!同曦队管理层内讧,谁是老板娘成为冲突源头距离CBA第三阶段,也就是常规赛最后14轮,还有20天的时间。在前两个阶段,被戏称网红队的同曦,可以说是大放异彩,第一阶段完成队史首次5连胜,也挺进了6强之列。虽然第二阶段有些回归近期入境柬埔寨,海关查得严吗?需要准备什么手续?2023年春节已经过去,不少中国人选择返回柬埔寨工作。而大家最为关心的问题是,现在入境柬埔寨,海关需要查验什么手续?是否需要准备什么文件资料?海关查得严吗?等等。对此记者采访多位近又见出国热美签约到了7月,法签到3月底菲律宾都排长队随着国门的打开,各国使领馆也开始开门营业了。今天石头就来说说出国旅游第一步签证的相关情况。开门就说签证,一定要重视,别买了机票,走不了。。因为刚刚全面恢复,部分签证情况的确很紧张。因祸得福!墨西哥女裁判犯事被辞,晒凉快照成网红,收入惊人时间来到2023年,中国足球的发展道路依然不好走,不过好在有了整治之心,自从李铁被抓后,已经有不少人落网,甚至还有足协和总局领导,也只有将这些害群之马彻底清除,中国足球的环境才得以
2022联名鞋款盘点,又是Nike杀疯的一年!在球鞋领域讲故事,Nike敢说第二,没谁敢说第一?大家发现没有,几乎真正能做到让人记忆犹新的联名鞋款,唯有Nike!刚刚,就在我回想2022年有哪些联名鞋款时,脑海里率先蹦出来的全心道一字禅(六)信信不信都是一心乱不乱都是一尘一心故无心为道一尘便重重无尽天真无上丢手绢跳皮筋皆是心源圆满大信成熟与世无争则无不争原来放下才是拿起憎即相会爱即别离心想事成哪来的逆旅调调频率一丝一毫NASA猎户座飞船绕月飞行后返回地球当地时间12月11日,美国国家航空航天局(NASA)的猎户座飞船完成为期25。5天的无人绕月飞行任务,在墨西哥下加利福尼亚州附近的太平洋上溅落。图为11月28日,猎户座所携影像设备MIUI14全体验分享轻巧顺畅的全新体验感12月1日晚,小米官方召开发布会,带来很多新品。其中MIUI14操作系统与全新的小米13系列同期亮相,让米粉们直呼过瘾。MIUI系统可以说是小米和米粉紧密联系的纽带,为了给米粉带去聊什么来什么,你跟我说手机没偷听?你和朋友坐在一起聊天,随手把手机扔桌上。你问他,家里暖气不热怎么办?夜晚,你便在小红书的信息流里刷到教你给暖气放气。你人一惊,心想难道又被手机窃听了?因为你从未主动搜索过类似话题。光子引擎剃刀计划带来轻快体验!MIUI14评测一前言MIUI14甩掉历史包袱光子引擎和剃刀计划只为打造最流畅系统作为小米的核心竞争力,MIUI已经走过了12年,全球月活跃用户达到5。64亿。12月11日,小米手机迎来小米13系知道自己不会是幸运儿,却不知道自己啥时候会变成小羊人昨天晚上我睡得较早,但是快到凌晨零点的时候,我却很奇怪地醒了。很大一个可能,就是老天爷的用心安排,让我可以第一时间去见证行程卡的下架。我又等了几分钟,看着时间过了零点,立刻打开支付英特尔确认第14代CPU家族将在LGA1851插槽上运行由于围绕英特尔即将推出的第14代流星湖处理器的许多谣言,以及该公司在最近泄露的未来五个季度的CPU路线图中根本没有提及它,围绕它的发布有很多问号,以及英特尔是否放弃了在桌面上发布流Mac上装了绝不后悔的5款软件1。自动切换输入法释放双手,自动切换中英文输入法聪明的你肯定知道,Mac可以通过快捷键切换输入法command空格control空格(10。11或更高版本系统)但是,追求效率(懒到截至目前,盘点屏幕采用2K分辨率的直板手机1三星GalaxyS22Ultra搭载全新一代骁龙8旗舰处理器,采用三星4nm制程工艺,图像处理能力AI性能等再次进化,拥有卓越的性能,但功耗也高,发热非常严重正面是一块6。8英寸UniPlex心声登场SHUREPLEX家族微型话筒大盘点SHURE微型头戴领夹话筒PLEX家族盘点TwinPlexDuraPlexUniPlex无惧挑战。SHURE微型头戴领夹PlexCable家族,无惧挑战,经久耐用!无论它工作在电影