搜索引擎排名过程简介

回复

SEO入门教程王豆瓜 发起了问题 • 1 人关注 • 0 个回复 • 48 次浏览 • 2020-02-28 10:43 • 来自相关话题

No input file specified解决方法

回复

web前端开发王豆瓜 发起了问题 • 1 人关注 • 0 个回复 • 55 次浏览 • 2020-02-28 10:17 • 来自相关话题

TCP端口状态说明ESTABLISHED

回复

web前端开发王豆瓜 发起了问题 • 1 人关注 • 0 个回复 • 41 次浏览 • 2020-02-28 10:15 • 来自相关话题

HTTP协议详解

回复

web前端开发王豆瓜 发起了问题 • 1 人关注 • 0 个回复 • 65 次浏览 • 2020-02-28 10:14 • 来自相关话题

truncate和delete的区别

回复

web前端开发王豆瓜 发起了问题 • 1 人关注 • 0 个回复 • 36 次浏览 • 2020-02-28 10:12 • 来自相关话题

linux常用命令全集

回复

web前端开发王豆瓜 发起了问题 • 1 人关注 • 0 个回复 • 60 次浏览 • 2020-02-28 10:11 • 来自相关话题

SEO入门教程详解

回复

SEO入门教程王豆瓜 发起了问题 • 1 人关注 • 0 个回复 • 56 次浏览 • 2020-02-27 21:06 • 来自相关话题

网站seo要解决的主要问题

回复

SEO入门教程王豆瓜 发起了问题 • 1 人关注 • 0 个回复 • 44 次浏览 • 2020-02-27 09:25 • 来自相关话题

网站排名优化的原理是什么

回复

SEO入门教程王豆瓜 发起了问题 • 1 人关注 • 0 个回复 • 52 次浏览 • 2020-02-27 09:24 • 来自相关话题

seo需要懂什么技术

回复

SEO入门教程王豆瓜 发起了问题 • 1 人关注 • 0 个回复 • 40 次浏览 • 2020-02-27 09:21 • 来自相关话题

SEO是什么

回复

SEO入门教程王豆瓜 发起了问题 • 1 人关注 • 0 个回复 • 54 次浏览 • 2020-02-27 09:17 • 来自相关话题

刷百度权重

回复

web前端开发王豆瓜 发起了问题 • 1 人关注 • 0 个回复 • 56 次浏览 • 2020-02-26 09:09 • 来自相关话题

黑帽SEO课程介绍

豆瓜学院事务王豆瓜 发表了文章 • 0 个评论 • 58 次浏览 • 2020-02-24 22:46 • 来自相关话题

黑帽SEO课程介绍 1、黑帽SEO培训内容有哪些? 入门篇 ...查看全部
黑帽SEO课程介绍

1、黑帽SEO培训内容有哪些?

入门篇

1:黑帽SEO常识讲解(最新、最流行黑帽SEO知识)

2:老域名选择(从年龄、外链、历史)[聚名网选择]

3:网站程序、服务器配置(Centos)与模板选择

4:白帽实战知识扫盲(布局、外链、文章、流量方面)

实战篇

1:单站排名思路及实战操作[养站][改站][301玩法]

2:泛目录排名原理及实战讲解(细节、配合工具)

3:镜像(克隆)网站程序实现及实战讲解实现

4:寄生虫原理讲解及运用实战(DY/FP/XJ)

5:蜘蛛劫持原理及实战运用(蜘蛛和用户不同)

6:网站秒排(布局、域名、模板)以及实战讲解

7:快照劫持原理讲解以及代码实战解析

算法篇

1:百度蜘蛛讲解(包含百度抓取策略)

2:TF-IDF算法高级运用(实战)

3:搜索引擎指纹算法高级运用(实战)

4:信任模型与非信任传播模型(实战)

5:PageRank算法实战讲解及运用

6:百度官方算法实战讲解(非口水话)

7:Hits算法讲解及实战运用

8:Salsa算法、HillTop算法讲解及实战

快排篇

1:快排原理讲解(实战剖析主流快排系统)

2:快排点击方法说明及实战讲解【道】

3:利用网站日志工具分析快排套路方法

4:百度站长平台深度分析与运用(仅针对快排)

5:百度统计工具数据分析及技巧掌握

6:快排程序探索以及必需品实战讲解

7:DIY快排程序(程序、思路、方法全部分享)

8:刷快排具体细节实战讲解(数量、词量、刷量)

附加篇

1:上课方式:千聊+视频讲解,一对一辅导问题

2:上述课程按顺序授课,实战、算法、快排为课程核心内容

3:本课程建议由一定白帽SEO基础并且执行力较强的同学报名参加

4:面授:赠送个人工具(快排软件)以及当面讲解使用方法

5:课时:30课时+豆瓜一年辅导(中途会贡献很多知识分享,上述课程为大纲)

6:授课周期:不限(后期有新技术会免费、及时更新)

7:备注:本人课程只讲黑帽SEO类排名方法,不讲入侵、黑站、盗Q、社工等一系列违法内容

工具篇【免费赠送】[python]

1:泛目录程序[PHP版][解读]

2:镜像程序[python版][从代码盗应用完全解读]

3:友情链接降权查询工具[python版]

4:排名查询程序[python版][代码盗应用完全解读]

5:购买链接筛选工具[python版][让外链更有效]

6:寄生虫程序[从源码盗实战]

7:随SEO时间节点不断更新工具......

2、培训周期为多久?

培训周期看学员自己,本身豆瓜老师专注于技术与圈子建设,周期终身制!面授一般学员周期(7--10天)。

数字歌曲视频mp4

回复

豆瓜学院事务admin 发起了问题 • 1 人关注 • 0 个回复 • 50 次浏览 • 2020-02-23 19:01 • 来自相关话题

SEO是什么意思

回复

白帽SEO入门admin 发起了问题 • 1 人关注 • 0 个回复 • 56 次浏览 • 2020-02-23 11:52 • 来自相关话题

新版Discuz论坛应用中心接入教程

web前端开发王豆瓜 发表了文章 • 0 个评论 • 55 次浏览 • 2020-02-22 16:41 • 来自相关话题

方法一: 升级为 X3.4 最新版,下载地址:https://www.dismall.com ...查看全部

方法一:

升级为 X3.4 最新版,下载地址:https://www.dismall.com/thread-73-1-1.html

不想升级X3.4的看方法二



方法二:

适用版本:X2.5、X3、X3.1、X3.2、X3.3、X3.4

下载自动转换文件:文件下载地址: http://pan.dougua.net/s/sal6hbe5    (1.31 KB, 下载次数: 22705) 解压后,把 replacedismall.php 放到论坛根目录,访问 http://你的网站/replacedismall.php 执行,会自动接入到新的应用中心



如果遇到“自动替换新应用中心失败,请尝试其他方法”,一般是文件权限问题导致无法修改,设置以下文件可读写(777)权限,再执行文件

source/function/function_cloudaddons.php

source/language/lang_admincp_msg.php

source/language/lang_admincp.php



黑帽seo培训教程大纲

豆瓜学院事务王豆瓜 发表了文章 • 0 个评论 • 72 次浏览 • 2020-02-22 11:59 • 来自相关话题

一、黑帽seo首页排名及基础培训 ----1.1  黑帽首页 ...查看全部
一、黑帽seo首页排名及基础培训

----1.1  黑帽首页排名概念解析

----1.2  织梦cms仿站,采集更新,优化技巧。

----1.3  实战如何利用插件/二开快速采集打造权重站

----1.4  单站拓展 wordpress搭建优化实操

----1.5  单站拓展 discuz搭建优化实操

----1.6  实战打造maccms电影流量站实操

----1.7  黑帽镜像单站的搭建以及优化

----1.8  黑帽镜像站群的批量管理以及优化建议

----1.9  黑帽seo单页面优化技巧实操

----小结 单站汇总讲解,实战中问题解答

二、黑帽seo内页排名拓展培训

----2.1 黑帽seo内页排名分类及概念讲解

----2.2 单目录/二级目录实操

----2.3 泛目录实操及优化建议。目录排名核心讲解

----2.4 泛站/单/泛域名/泛内页理论区分和实操用途

----2.5 泛站群实操演练和优化技巧

----2.6 实战寄生虫程序实操演练

----2.7 蜘蛛池实操以及各大引擎蜘蛛喜好区分

----2.8 关键词的抓取方式和技巧

----2.9 老域名的分析指标和挑选方法

----小结 内页排名汇总讲解,实战中的问题解答

三、黑帽seo辅助手法延申

----3.1 服务器的搭建和安全策略

----3.2 了解安全防御的常见漏洞类型

----3.3 了解常见攻击/劫持方式和工作原理

----3.4 了解常用hack软件的的工作原理

----3.5 技术变现的几条思路指导和汇总遗留问题

建站经验有哪些

回复

web前端开发王豆瓜 回复了问题 • 1 人关注 • 1 个回复 • 62 次浏览 • 2020-02-20 10:14 • 来自相关话题

HTTP协议详解

网络安全防护王豆瓜 发表了文章 • 0 个评论 • 106 次浏览 • 2020-02-19 11:32 • 来自相关话题

HTTP协议简介 超文本传输协议(英文:HyperText Trans ...查看全部

HTTP协议简介



超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。



HTTP的发展是由蒂姆·伯纳斯-李于1989年在欧洲核子研究组织(CERN)所发起。HTTP的标准制定由万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)进行协调,最终发布了一系列的RFC,其中最著名的是1999年6月公布的 RFC 2616,定义了HTTP协议中现今广泛使用的一个版本——HTTP 1.1。



2014年12月,互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis(httpbis)工作小组将HTTP/2标准提议递交至IESG进行讨论,于2015年2月17日被批准。 HTTP/2标准于2015年5月以RFC 7540正式发表,取代HTTP 1.1成为HTTP的实现标准。



HTTP协议概述



HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。通过使用网页浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。我们称这个客户端为用户代理程序(user agent)。应答的服务器上存储着一些资源,比如HTML文件和图像。我们称这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关或者隧道(tunnel)。



尽管TCP/IP协议是互联网上最流行的应用,HTTP协议中,并没有规定必须使用它或它支持的层。事实上,HTTP可以在任何互联网协议上,或其他网络上实现。HTTP假定其下层协议提供可靠的传输。因此,任何能够提供这种保证的协议都可以被其使用。因此也就是其在TCP/IP协议族使用TCP作为其传输层。



通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。



HTTP工作原理



HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。



以下是 HTTP 请求/响应的步骤:



\1. 客户端连接到Web服务器

一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如,http://www.luffycity.com



\2. 发送HTTP请求

通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。



\3. 服务器接受请求并返回HTTP响应

Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。



\4. 释放连接TCP连接

若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;



\5. 客户端浏览器解析HTML内容

客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。



例如:在浏览器地址栏键入URL,按下回车之后会经历以下流程:




  1. 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;

  2. 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;

  3. 浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;

  4. 服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;

  5. 释放 TCP连接;

  6. 浏览器将该 html 文本并显示内容;  



  



  img



  http协议是基于TCP/IP协议之上的应用层协议。



  基于 请求-响应 的模式



    HTTP协议规定,请求从客户端发出,最后服务器端响应该请求并 返回。换句话说,肯定是先从客户端开始建立通信的,服务器端在没有 接收到请求之前不会发送响应



    img



  无状态保存



    HTTP是一种不保存状态,即无状态(stateless)协议。HTTP协议 自身不对请求和响应之间的通信状态进行保存。也就是说在HTTP这个 级别,协议对于发送过的请求或响应都不做持久化处理。



    img



    使用HTTP协议,每当有新的请求发送时,就会有对应的新响应产 生。协议本身并不保留之前一切的请求或响应报文的信息。这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把HTTP协议设计成 如此简单的。可是,随着Web的不断发展,因无状态而导致业务处理变得棘手 的情况增多了。比如,用户登录到一家购物网站,即使他跳转到该站的 其他页面后,也需要能继续保持登录状态。针对这个实例,网站为了能 够掌握是谁送出的请求,需要保存用户的状态。HTTP/1.1虽然是无状态协议,但为了实现期望的保持状态功能, 于是引入了Cookie技术。有了Cookie再用HTTP协议通信,就可以管 理状态了。有关Cookie的详细内容稍后讲解。



  无连接



    无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间,并且可以提高并发性能,不能和每个用户建立长久的连接,请求一次相应一次,服务端和客户端就中断了。但是无连接有两种方式,早期的http协议是一个请求一个响应之后,直接就断开了,但是现在的http协议1.1版本不是直接就断开了,而是等几秒钟,这几秒钟是等什么呢,等着用户有后续的操作,如果用户在这几秒钟之内有新的请求,那么还是通过之前的连接通道来收发消息,如果过了这几秒钟用户没有发送新的请求,那么就会断开连接,这样可以提高效率,减少短时间内建立连接的次数,因为建立连接也是耗时的,默认的好像是3秒中现在,但是这个时间是可以通过咱们后端的代码来调整的,自己网站根据自己网站用户的行为来分析统计出一个最优的等待时间。



HTTP请求方法



HTTP/1.1协议中共定义了八种方法(也叫“动作”)来以不同方式操作指定的资源:



GET



向指定的资源发出“显示”请求。使用GET方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中,例如在Web Application中。其中一个原因是GET可能会被网络蜘蛛等随意访问。





与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。



POST



向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。



PUT



向指定资源位置上传其最新内容。



DELETE



请求服务器删除Request-URI所标识的资源。



TRACE



回显服务器收到的请求,主要用于测试或诊断。



OPTIONS



这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用'*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。



CONNECT



HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。



注意事项:




  1. 方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed),当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。

  2. HTTP服务器至少应该实现GET和HEAD方法,其他方法都是可选的。当然,所有的方法支持的实现都应当匹配下述的方法各自的语义定义。此外,除了上述方法,特定的HTTP服务器还能够扩展自定义的方法。例如PATCH(由 RFC 5789 指定的方法)用于将局部修改应用到资源



请求方式: get与post请求(通过form表单我们自己写写看)





  • GET提交的数据会放在URL之后,也就是请求行里面,以?分割URL和传输数据,参数之间以&相连,如EditBook?name=test1&id=123456.(请求头里面那个content-type做的这种参数形式,后面讲) POST方法是把提交的数据放在HTTP包的请求体中.




  • GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.




  • GET与POST请求在服务端获取请求数据方式不同,就是我们自己在服务端取请求数据的时候的方式不同了,这句废话昂。





HTTP状态码



所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。



状态代码的第一个数字代表当前响应的类型:




  • 1xx消息——请求已被服务器接收,继续处理

  • 2xx成功——请求已成功被服务器接收、理解、并接受

  • 3xx重定向——需要后续操作才能完成这一请求

  • 4xx请求错误——请求含有词法错误或者无法被执行

  • 5xx服务器错误——服务器在处理某个正确请求时发生错误



虽然 RFC 2616 中已经推荐了描述状态的短语,例如"200 OK","404 Not Found",但是WEB开发者仍然能够自行决定采用何种短语,用以显示本地化的状态描述或者自定义信息。



  img



URL



超文本传输协议(HTTP)的统一资源定位符将从因特网获取信息的五个基本元素包括在一个简单的地址中:




  • 传送协议。

  • 层级URL标记符号(为[//],固定不变)

  • 访问资源需要的凭证信息(可省略)

  • 服务器。(通常为域名,有时为IP地址)

  • 端口号。(以数字方式表示,若为HTTP的默认值“:80”可省略)

  • 路径。(以“/”字符区别路径中的每一个目录名称)

  • 查询。(GET模式的窗体参数,以“?”字符为起点,每个参数以“&”隔开,再以“=”分开参数名称与数据,通常以UTF8的URL编码,避开字符冲突的问题)

  • 片段。以“#”字符为起点



以http://www.luffycity.com:80/news/index.html?id=250&page=1 为例, 其中:



http,是协议;

www.luffycity.com,是服务器;

80,是服务器上的默认网络端口号,默认不显示;

/news/index.html,是路径(URI:直接定位到对应的资源);

?id=250&page=1,是查询。

大多数网页浏览器不要求用户输入网页中“http://”的部分,因为绝大多数网页内容是超文本传输协议文件。同样,“80”是超文本传输协议文件的常用端口号,因此一般也不必写明。一般来说用户只要键入统一资源定位符的一部分(www.luffycity.com:80/news/index.html?id=250&page=1)就可以了。



由于超文本传输协议允许服务器将浏览器重定向到另一个网页地址,因此许多服务器允许用户省略网页地址中的部分,比如 www。从技术上来说这样省略后的网页地址实际上是一个不同的网页地址,浏览器本身无法决定这个新地址是否通,服务器必须完成重定向的任务。



HTTP请求格式(请求协议)



    img



     URL包含:/index/index2?a=1&b=2;路径和参数都在这里。



    img



      请求头里面的内容举个例子:这个length表示请求体里面的数据长度,其他的请求头里面的这些键值对,陆续我们会讲的,大概知道一下就可以了,其中有一个user-agent,算是需要你记住的吧,就是告诉你的服务端,我是用什么给你发送的请求。



      img



      



      以京东为例,看一下user-agent



      img



     img



      看一个爬虫的例子,爬京东的时候没问题,但是爬抽屉的时候必须带着user-agent,因为抽屉对user-agent做了判断,来判断你是不是一个正常的请求,算是反扒机制的一种。



      img



      打开我们保存的demo.html文件,然后通过浏览器打开看看就能看到页面效果。



      写上面这些内容的意思是让你知道有这么个请求头的存在,有些是有意义的,请求头我们还可以自己定义,就在requests模块里面那个headers={},这个字典里面加就行。



      



  



HTTP响应格式(响应协议)



  img



  img


Linux mount 命令

网络安全防护王豆瓜 发表了文章 • 0 个评论 • 46 次浏览 • 2020-02-19 10:39 • 来自相关话题

mount 命令用来挂载文件系统。其基本命令格式为: mount -t type [-o options] device dir device ...查看全部

mount 命令用来挂载文件系统。其基本命令格式为:

mount -t type [-o options] device dir

device:指定要挂载的设备,比如磁盘、光驱等。

dir:指定把文件系统挂载到哪个目录。

type:指定挂载的文件系统类型,一般不用指定,mount 命令能够自行判断。

options:指定挂载参数,比如 ro 表示以只读方式挂载文件系统。



Help



可以通过 man page 和 -h 选项来获得最直接的帮助文档:




$ man mount
$ mount -h


文件系统的类型



虽然多数情况下我们不用指定 -t 参数显式地说明文件系统的类型,但文件系统的类型对 mount 命令来说确实是非常重要的。原因是假如你要挂载一个当前系统不支持的文件系统,它是没办法工作的。当前系统支持的文件系统类型是由内核来决定的,比如 ext2、ext3、ext4、sysfs 和 proc 等常见的文件系统默认都是被支持的。我们可以通过查看 /proc/filesystems 文件来观察当前系统具体都支持哪些文件系统:




$ cat /proc/filesystems




第一列说明文件系统是否需要挂载在一个块设备上, nodev 表明后面的文件系统不需要挂接在块设备上。 第二列是内核支持的文件系统。



看懂输出的文件系统信息



通过 mount 命令查看已挂载的文件系统,会输出丰富的信息,如下图所示:





让我们先来解释一下输出信息的格式和含义。输出中的每行代表挂载的一个文件系统,其格式为:

fs_spec on fs_file type fs_vfstype (fs_mntopts)

fs_spec:挂载的块设备或远程文件系统

fs_file:文件系统的挂载点

fs_vfstype:文件系统的类型

fs_mntopts:与文件系统相关的更多选项,不同的文件系统其选项也不太一样

比如上图中的第一行含义为:挂载的设备为 sysfs,挂载点为 /sys,文件系统的类型为 sysfs。括号中的 rw 表示以可读写的方式挂载文件系统,noexec 表示不能在该文件系统上直接运行程序。



与 mount 命令相关的文件



/etc/fstab

/etc/mtab

/proc/mounts



mount -a 会将 /etc/fstab 中定义的所有挂载点都挂上(一般是在系统启动时的脚本中调用,自己最好别用!)。



mount 和 umount 命令会在 /etc/mtab 文件中维护当前挂载的文件系统的列表,这个文件在目前的系统中还是被支持的。但是更好的方式是用链接文件 /proc/mounts 代替 /etc/mtab 文件。这是因为在用户空间中维护的普通文件 /etc/mtab 很难稳定可靠的与 namespaces、containers 等 Linux 的高级功能协作。在 ubuntu 16.04 上, /etc/mtab 和  /proc/mounts 一样,都是指向 /proc/self/mounts 的链接文件。



下面我们介绍一些 mount 命令的常见用例。



查看挂载的文件系统



输出系统挂载的所有文件系统

如果执行 mount 命令时不加任何参数,就会输出系统挂载的所有文件系统:




$ mount


输出指定类型的文件系统

通过 -t 参数可以只输出指定类型的文件系统,比如下面的命令只会输出 tmpfs 类型的文件系统:




$ mount -t tmpfs


格式化并挂载磁盘



对于一个磁盘分区,我们可以使用 mkfs 命令把磁盘分区格式化为指定的文件系统,比如 ext4:




$ sudo mkfs -t ext4 /dev/sdb1


然后把该分区挂载到 /mnt 目录:




$ sudo mount /dev/sdb1 /mnt


挂载光驱



现在偶尔还还需要使用一下光驱,挂载光驱的命令如下:




$ sudo mount /dev/cdrom /mnt




该命令把设备 /dev/cdrom 挂载在 /mnt 目录中,然后我们就可以在 /mnt 目录下访问光驱中的内容了。



以只读的方式挂载



可以把文件系统挂载为只读模式,从而保护数据。比如将 /dev/sdb1 用只读模式挂在 /mnt 目录:




$ sudo mount -o ro /dev/sdb1 /mnt




这样 /mnt 目录下的文件都是只读的。



把只读的挂载重新挂载为读写模式



当系统出现故障进入单用户模式时,通常 / 根目录会以只读方式挂载,这时如果想要修改文件,会发现所有文件都是只读状态,无法修改。好在 Linux 下的 mount 命令支持一个remount 选项,只需要执行如下命令:




$ mount / -o rw,remount


就可以将根分区重新挂载为读写状态。



除了根目录,重新挂载其它挂载点也是一样的,比如我们把前面挂载的 sdb1 分区重新挂载为读写模式:




$ sudo mount /mnt -o rw,remount




挂载 windows 共享文件



局域网中一般都是 windows 系统和 Linux 系统共存的,如果能轻松的从 Linux 系统中访问 windows 的文件共享将是一件很开心的事情。其实这也很简单,在 windows 上共享文件时指定一个本机的用户,然后在 mount 命令中指定这个用户及其密码就可以了:




$ sudo mount -t cifs -o username=nick,password=Test123456 //10.32.2.30/doc /mnt




注意,-t cifs 是可以省略的,mount 命令能够自动识别。一定要使用 IP 代替 windows 主机的名称。



挂载虚拟文件系统



proc、tmpfs、sysfs、devpts 等都是 Linux 内核映射到用户空间的虚拟文件系统,它们不和具体的物理设备关联,但它们具有普通文件系统的特征,应用层程序可以像访问普通文件系统一样来访问他们。

比如内核的 proc 文件系统默认被挂载到了 /proc 目录,当然我们也可以再把它挂载到其它的目录,比如 /mnt 目录下:




$ sudo mount -t proc none /mnt


由于 proc 是内核虚拟的一个文件系统,并没有对应的设备,所以这里的 -t 参数不能省略。由于没有对应的源设备,这里的 none 可以是任意字符串,取个有意义的名字就可以了,因为用 mount 命令查看挂载点信息时第一列显示的就是这个字符串。



在 Linux 上我们还可以通过 tmpfs 文件系统轻松地构建出内存磁盘来。比如在内存中创建一个 512M 的 tmpfs 文件系统,并挂载到 /mnt 下,这样所有写到 /mnt 目录下的文件都存储在内存中,速度非常快,不过要注意,由于数据存储在内存中,所以断电后数据会丢失掉:




$ sudo mount -t tmpfs -o size=512m tmpfs /mnt


挂载 loop 设备



在 Linux中,硬盘、光盘、软盘等都是常见的块设备,他们在 Linux 下的目录一般是 /dev/sda1、/dev/cdrom、 /dev/fd0 这样的。而 loop device 是虚拟的块设备,主要目的是让用户可以像访问上述块设备那样访问一个文件。 loop device 设备的路径一般是 /dev/loop0、dev/loop1 等,具体的个数跟内核的配置有关。



挂载 ISO 文件

需要用到 loop device 的最常见的场景是挂载一个 ISO 文件。比如将 /tmp/test.iso 这个光盘镜像文件使用 loop 模式挂载到 /mnt 下,这样就不需要把 ISO 文件刻录到光盘上了,当然也不需要光驱了。

下面的命令把 projects 目录下的内容打包到 test.iso 文件中:




$ mkisofs -o test.iso projects/


然后把这个 ISO 文件挂载到 /mnt 目录下:




$ sudo mount test.iso /mnt




挂载 test.iso 文件使用了虚拟设备 /dev/loop0,并且是只读的模式。



虚拟硬盘

loop 设备另一种常见的用法是虚拟一个硬盘,比如我想玩儿一下 btrfs 这个文件系统,但系统中目前的所有分区都已经用了,里面都是有用的数据,不想格式化他们,这时虚拟硬盘就有用武之地了。



我们先通过 dd 命令创建一个 512M 的文件:




$ dd if=/dev/zero bs=1M count=512 of=./vdisk.img


然后在这个文件里面创建 btrfs 文件系统:




$ sudo apt install btrfs-progs
$ mkfs.btrfs vdisk.img


最后把它挂载到 /mnt :




$ sudo mount vdisk.img /mnt


把多个设备挂载到同一个目录



在 Linux 中可以把多个设备挂载到同一个目录。默认后面挂载的内容会让前面挂载的内容隐藏掉,只有 unmount 了后面挂载的内容,才会显示原来的内容。



挂载一个设备到多个目录



我们也可以把同一个设备挂载到不同的目录,这样在不同的目录中看到的是同样的内容。还可以在不同的目录中控制挂载的权限,比如以只读方式挂载:




$ sudo mount -o ro vdisk.img ./testdir


这样从不同的目录访问相同的文件系统时就具有了不同的访问权限。



总结



mount 是 Linux 系统中非常重要的一个命令,因为离开 mount 挂载的文件系统我们几乎什么也干不了。本文介绍了一些 mount 命令的基础用法 ,日常使用应该是够了。mount 命令还有一些相关的复杂概念和用法,比如 bind mount 和 shared subtree 等,笔者会在今后写专门的文章进行介绍。