Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

原文:http://www.win10.systems/tips/2019-02-24/12769.html

Ext4或扩展文件系统版本4是Linux的文件系统。 如果您有一个Windows 10 + Linux双启动或在Ext4中将其格式化的硬盘驱动器,您如何阅读Windows 10? 虽然Linux支持NTFS,但Windows 10不支持Ext4。 所以Windows 10读取ext4的问题的答案是 - 不! 但您可以使用第三方软件在Windows 10上读取ext4。

Windows 10中阅读Ext4

在我们开始之前,请确保永远不要从Windows写入EXT4驱动器。 EXT格式有记录日志和将文件写入系统的方式。 如果您找到可以执行此操作的软件,则无法保证在Linux系统上使用它时,它们是可读的。

1] DiskInternals Linux Reader

如何在Windows 10中阅读Ext4

DiskInternals Linux Reader是一款免费软件,它安装了驱动程序,允许您从Windows的文件资源管理器中读取Ext4分区。它仅支持读取,即查看和复制文件和文件夹。在Root上,即top文件夹时,它会显示一些统计信息,例如不同类型数据的计数。

2] 7-Zip Archiver

如果您有EXT4的图像,即驱动器映像或完整的操作系统映像,则可以使用7-Zip Archiver读取其中的所有文件。

3] Ext2Read

它是Linux文件系统格式的文件浏览器(Ext2,Ext3,LVM2,Ext4)。您可以从Ext4查看,复制文件和文件夹到Windows 10分区。由于它支持文件和文件夹的递归复制,因此当您想要复制大量文件时,它非常理想。它还支持基于LRU的块缓存,以实现更快的并发访问

如果您有双启动系统,它可以访问Windows中的Linux分区。您可以从此处下载,但请注意该软件尚未更新。但它是免费的并且有效。

原文:https://zhuanlan.zhihu.com/p/106459445

持久性的数据是存储在外部磁盘上的【注1】,如果没有文件系统,访问这些数据就需要直接读写磁盘的sector,实在太不方便了。而文件系统存在的意义,就是能更有效的组织、管理和使用磁盘上的这些raw data。

文件系统的组成

要管理,就得先划分,那按照什么粒度划分呢?因为磁盘上的数据要和内存交互,而内存通常是以4KB为单位的,所以从逻辑上,把磁盘按照4KB划分比较方便(称为一个block)。现在假设由一个文件系统管理64个blocks的一个磁盘区域:

empty disk

那在这些blocks中应该存储些什么?文件系统的基础要素自然是文件,而文件作为一个数据容器的逻辑概念,本质上是一些字节构成的集合,这些字节就是文件的user data(对应下图的”D”)。

user data

除了文件本身包含的数据,还有文件的访问权限、大小和创建时间等控制信息,这些信息被称为meta data。meta data可理解为是关于文件user data的data,这些meta data存储的数据结构就是inode(对应下图的”I”,有些文件系统称之为dnode或fnode)。

inode是”index node”的简称,在早期的Unix系统中,这些nodes是通过数组组织起来的,因此需要依靠index来索引数组中的node。假设一个inode占据256字节,那么一个4KB的block可以存放16个inodes,使用5个blocks可以存放80个inodes,也就是最多支持80个文件。

meta data + user data

内存分配一样,当有了新的数据产生时,我们需要选择一个空闲的block来存放数据,此外还需要一个空闲的inode。所以,需要追踪这些inodes和data blocks的分配和释放情况,以判断哪些是已用的,哪些是空闲的。

最简单的办法就是使用bitmap,包括记录inode使用情况的bitmap(对应下图的”i”),和记录data block使用情况的bitmap(对应下图的”d”)。空闲就标记为0,正在使用就标记为1。

bitmap + meta data + user date

因为block是最小划分单位,所以这里使用了两个blocks来分别存储inode bitmap和data block bitmap,每个block可以容纳的bits数量是4096*8。而这里我们只有80个inodes和56个data blocks,所以是绰绰有余的。

还剩下开头的一个block,这个block是留给superblock的(对应下图的”S”)。

superblock + bitmap + meta data + user date

这个superblock包含了一个文件系统所有的控制信息,比如文件系统中有多少个inodes和data blocks,inode的信息起始于哪个block(这里是第3个),可能还有一个区别不同文件系统类型的magic number。因此,superblock可理解为是文件系统的meta data。

文件寻址

这5个blocks中的80个inodes构成了一个inode table。假设一个inode的大小是256字节,现在我们要访问第32个文件,那就要先找到这个文件的控制信息,也就是第32个inode所在的磁盘位置。它应该在相对inode table起始地址的8KB处(32*256=8192),而inode table的起始地址是12KB,所以实际位置是20KB。

inode table

磁盘同内存不同,它在物理上不是按字节寻址的,而是按sector。一个sector的大小通常是512字节,因此换算一下就是第40个sector(20*1024/512)。

对于ext2/3/4文件系统,以上介绍的这些inode bitmap, data block bitmap和inode table,都可以通过一个名为**”dumpe2fs”**的工具来查看其在磁盘上的具体位置:

如果只需要查看inode的使用情况,那么直接使用”df -i”命令即可:

inode usage

寻址方式

那通过inode如何找到对应的文件呢?根据大小的不同,一个文件需要占据若干个blocks,这些blocks可能是磁盘上连续分布的,也可能不是。所以,比较好的办法是使用指针,指针存储在inode中,一个指针指向一个block。

不过,在这个简化的示例里,并不需要C语言里那种指针,只需要一个block的编号就可以了。如果文件比较小,占有的blocks数目就比较少,那么一个256字节的inode就能存储这些指针。假设一个inode最多能包含12个指针,那么文件的大小不能超过48KB。

那如果超过了怎么办?可由inode先指向一个block,这个block再指向分散的data block,这种方法称为multi-level index。inode在指向中间block的同时,也可以直接指向data block。假设一个指针占据4个字节,那么一个中间block可存储1024个指针,二级index的寻址范围就可超过4MB,三级index则可超过4GB。

有没有觉得很像内存管理中的多级页表?事实上,它们的原理可以说是一样的,文件在磁盘上的实际block分布对等于内存的物理地址,而各级index就对等于内存的虚拟地址。

这种只使用block指针的方式被ext2和ext3文件系统所采用,但它存在一个问题,对于各种大小的文件,都需要较多的meta data。而在实际的应用中,大多数文件的体积都很小,meta data相对user data的占比就较大。

另一种实现是使用一个block指针加上一个length来表示一组物理上连续的blocks(称为一个extent,其中length以block为单位计),一个文件由若干个extents构成。这样,小文件所需要的meta data就较少,这种更灵活的实现方式被后来的ext4文件系统所采用。

1
2
3
4
5
struct ext4_extent {
__le32 ee_block; /* first logical block extent covers */
__le16 ee_len; /* number of blocks covered by extent */
...
};

目录和路径

各级目录构成了访问文件的路径,不同于windows操作系统的drive分区,类Unix系统中的”mount”操作让所有的文件系统的挂载点都是一个路径,形成了树形结构。从抽象的角度,目录也可视作一种文件,只是这种文件比较特殊,它的user data存储的是该路径下的普通文件的inode编号。

所以,如下图所示的这样一个路径结构,假设要在”/foo”目录下创建一个文件”bar.txt”,那么需要从inode bitmap中分配一个空闲的inode,并在”/foo”这个目录中分配一个entry,以关联这个inode号。

接下来,我们要读取刚才创建的这个”/foo/bar.txt”文件,那么先得找到”/“这个目录文件的inode号(这必须是事先知道的,假设是2)。然后访问这个inode指向的data block,从中找到一个名为”foo”的entry,得到目录文件”foo”的inode号(假设是44)。重复此过程,按图索骥,直到找到文本文件”bar.txt”的inode号。

小结

现代文件系统的实现是很庞杂的,但文件系统的原理本身并不深奥,基本的构成要素就是file data,管理各个文件的inode和管理整个文件系统的superblock。基于这些要素,下文将开始介绍读写一个文件的具体方式和接口。

注1:所谓持久性(persistance),就是指即便面对困难、挑战,依然可以持续,对于设备来说,就是面对掉电、操作系统crash,依然可以保持数据的持久存在。

参考:

原创文章,转载请注明出处。

转自https://www.cnblogs.com/taiyonghai/p/9402734.html

一、Nginx简介

Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru 站点(俄文:Рамблер)开发的.

它也是一种轻量级的Web服务器,可以作为独立的服务器部署网站(类似Tomcat)。它高性能和低消耗内存的结构受到很多大公司青睐,如淘宝网站架设。

先下载直接去官网nginx.org

分别有Linux和Windows两个版本

点击后就会下载,下载完成后开始安装,其实官网已经告诉了如何安装,右侧“documentation -> nginx windows”就有详细的说明,只是英文而已

二、安装部署

1、下载完成后,解压缩,运行cmd,使用命令进行操作,不要直接双击nginx.exe,不要直接双击nginx.exe,不要直接双击nginx.exe

一定要在dos窗口启动,不要直接双击nginx.exe,这样会导致修改配置后重启、停止nginx无效,需要手动关闭任务管理器内的所有nginx进程,再启动才可以

2、使用命令到达nginx的加压缩后的目录

1
cd c:\nginx-1.15.2

3、启动nginx服务,启动时会一闪而过是正常的

1
start nginx

4、查看任务进程是否存在,dos或打开任务管理器都行

1
tasklist /fi "imagename eq nginx.exe"

打开任务管理器在进程中看不到nginx.exe的进程(双击nginx.exe时会显示在这里),需要打开详细信息里面能看到隐藏的nginx.exe进程

 如果都没有可能是启动报错了查看一下日志,在nginx目录中的logs文件夹下error.log是日志文件

常见的错误:

(1)端口号被占用

(2)nginx文件夹路径含中文

其他错误就详细看log中的描述

5、修改配置文件,进入解压缩目录,直接文件夹点击进去即可,不需要从dos操作

在conf目录下找到nginx.conf使用txt文本打开即可,找到server这个节点,修改端口号,如果有需求可以修改主页目录没有就不用修改

修改完成后保存,使用以下命令检查一下配置文件是否正确,后面是nginx.conf文件的路径,successful就说明正确了

1
nginx -t -c /nginx-1.15.2/conf/nginx.conf

如果程序没启动就直接start nginx启动,如果已经启动了就使用以下命令重新加载配置文件并重启

1
nginx -s reload

之后就打开浏览器访问刚才的域名及端口http://localhost:8800,出现欢迎页就说明部署成功了

6、关闭nginx服务使用以下命令,同样也是一闪而过是正常的,看一下是否进程已消失即可

快速停止

1
nginx -s stop

完整有序的关闭

1
nginx -s quit

三、优化配置

 打开nginx.conf按照自己需求进行配置,下面列出简单的一些常规调优配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#user  nobody;

#==工作进程数,一般设置为cpu核心数
worker_processes 1;

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/nginx.pid;


events {

#==最大连接数,一般设置为cpu*2048
worker_connections 1024;
}


http {
include mime.types;
default_type application/octet-stream;

#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';

#access_log logs/access.log main;

sendfile on;
#tcp_nopush on;

#keepalive_timeout 0;

#==客户端链接超时时间
keepalive_timeout 65;

#gzip on;

#当配置多个server节点时,默认server names的缓存区大小就不够了,需要手动设置大一点
server_names_hash_bucket_size 512;

#server表示虚拟主机可以理解为一个站点,可以配置多个server节点搭建多个站点
#每一个请求进来确定使用哪个server由server_name确定
server {
#站点监听端口
listen 8800;
#站点访问域名
server_name localhost;

#编码格式,避免url参数乱码
charset utf-8;

#access_log logs/host.access.log main;

#location用来匹配同一域名下多个URI的访问规则
#比如动态资源如何跳转,静态资源如何跳转等
#location后面跟着的/代表匹配规则
location / {
#站点根目录,可以是相对路径,也可以使绝对路径
root html;
#默认主页
index index.html index.htm;

#转发后端站点地址,一般用于做软负载,轮询后端服务器
#proxy_pass http://10.11.12.237:8080;

#拒绝请求,返回403,一般用于某些目录禁止访问
#deny all;

#允许请求
#allow all;

add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
#重新定义或者添加发往后端服务器的请求头
#给请求头中添加客户请求主机名
proxy_set_header Host $host;
#给请求头中添加客户端IP
proxy_set_header X-Real-IP $remote_addr;
#将$remote_addr变量值添加在客户端“X-Forwarded-For”请求头的后面,并以逗号分隔。 如果客户端请求未携带“X-Forwarded-For”请求头,$proxy_add_x_forwarded_for变量值将与$remote_addr变量相同
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#给请求头中添加客户端的Cookie
proxy_set_header Cookie $http_cookie;
#将使用代理服务器的主域名和端口号来替换。如果端口是80,可以不加。
proxy_redirect off;

#浏览器对 Cookie 有很多限制,如果 Cookie 的 Domain 部分与当前页面的 Domain 不匹配就无法写入。
#所以如果请求 A 域名,服务器 proxy_pass 到 B 域名,然后 B 服务器输出 Domian=B 的 Cookie,
#前端的页面依然停留在 A 域名上,于是浏览器就无法将 Cookie 写入。

   #不仅是域名,浏览器对 Path 也有限制。我们经常会 proxy_pass 到目标服务器的某个 Path 下,
#不把这个 Path 暴露给浏览器。这时候如果目标服务器的 Cookie 写死了 Path 也会出现 Cookie 无法写入的问题。

#设置“Set-Cookie”响应头中的domain属性的替换文本,其值可以为一个字符串、正则表达式的模式或一个引用的变量
#转发后端服务器如果需要Cookie则需要将cookie domain也进行转换,否则前端域名与后端域名不一致cookie就会无法存取
       #配置规则:proxy_cookie_domain serverDomain(后端服务器域) nginxDomain(nginx服务器域)
proxy_cookie_domain localhost .testcaigou800.com;

#取消当前配置级别的所有proxy_cookie_domain指令
#proxy_cookie_domain off;
#与后端服务器建立连接的超时时间。一般不可能大于75秒;
proxy_connect_timeout 30;
}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

}

  #当需要对同一端口监听多个域名时,使用如下配置,端口相同域名不同,server_name也可以使用正则进行配置
  #但要注意server过多需要手动扩大server_names_hash_bucket_size缓存区大小
  server {
    listen 80;
    server_name www.abc.com;
    charset utf-8;
    location / {
      proxy_pass http://localhost:10001;
    }
  }
  server {
    listen 80;
    server_name aaa.abc.com;
    charset utf-8;
    location / {
      proxy_pass http://localhost:20002;
    }
  }
}

转自:https://www.cnblogs.com/fireflys/p/10600190.html

备注:

  1. 百度下载之后就可以下载,或者点击下面的连接下载(android terminal );
  2. 如果没开启热点,显示的是当前手机连接的wifi信息;
  3. 开启热点之后,新出现的ip就是连接自己手机的ip;

原文:

因为最近玩树莓派,需要手机做热点,然后用树莓派连接到这个热点上,苦于不知道树莓派被分配了什么样的ip地址,经过一番探索,我发现了两种办法,

  安装一个 android terminal ( 安卓命令行),这是一个开源程序,目的是在安卓上也模拟出命令行的效果,安装成功后就是一个和linux 命令行相似的界面,它可以支持部分的指令,(当一个$符号出现时,说明它在等待用户输入命令,如果没有$符号试试,按加号新建一个窗口), 输入指令 ip neigh 就能获得相关的ip地址信息啦!结果图如下:

第一行 wlan0 是手机热点自身的ip地址,其后是手机”网卡”的mac地址,下面两个就是连到手机上的两个设备的ip地址,

  第二个方法未验证,需要手机有root权限,root后的手机直接读 /proc/net/arp 这个路径下的文件就行了, 用re 文件浏览器或者 es文件浏览器,,arp 这个文件是arp 转发表的缓存,打开这个文件能找到几个ip地址,这些除了手机自身的,剩下的就是需要的ip地址了,

0%