前言
作者:小蝸牛向前沖
名言:我可以接受失敗,但我不能接受放棄
??如果覺的博主的文章還不錯(cuò)的話,還請(qǐng)
點(diǎn)贊,收藏,關(guān)注??支持博主。如果發(fā)現(xiàn)有問題的地方歡迎?大家在評(píng)論區(qū)指正?
本期學(xué)習(xí):htpp協(xié)議,認(rèn)識(shí)URL,?理解htpp協(xié)議的基本結(jié)構(gòu),寫一個(gè)簡(jiǎn)單的http協(xié)議。
目錄
一 、Http協(xié)議基礎(chǔ)知識(shí)
1、基本概念
2、htpp基本結(jié)構(gòu)?
2.1認(rèn)識(shí)URL
?2.2urlencode和urldecode
2.3其他屬性
二、基于Http服務(wù)器?
1、htppserver服務(wù)器
2、Protool.hpp?
3、Util.hpp?
4、wwwroot
5、程序運(yùn)行后的細(xì)節(jié)
一 、Http協(xié)議基礎(chǔ)知識(shí)
1、基本概念
? ? ? ? HTTP協(xié)議是一種無(wú)狀態(tài)、應(yīng)用層的協(xié)議,它定義了客戶端和服務(wù)器之間進(jìn)行通信的規(guī)則。它使用請(qǐng)求-響應(yīng)的模式,客戶端發(fā)送HTTP請(qǐng)求到服務(wù)器,服務(wù)器則返回相應(yīng)的HTTP響應(yīng)。
? ? ? 在HTTP中,客戶端是發(fā)起請(qǐng)求的一方,通常是一個(gè)Web瀏覽器,而服務(wù)器是接收請(qǐng)求并提供響應(yīng)的一方??蛻舳税l(fā)送一個(gè)由請(qǐng)求方法(如GET、POST、PUT等)和URL組成的請(qǐng)求,包含一些附加的請(qǐng)求頭信息(如Host、User-Agent等)。服務(wù)器解析請(qǐng)求并返回響應(yīng),響應(yīng)包含一個(gè)狀態(tài)碼(如200表示成功、404表示未找到等),響應(yīng)頭信息(如Content-Type、Content-Length等),以及可選的響應(yīng)體(即實(shí)際傳輸?shù)臄?shù)據(jù))。
HTTP協(xié)議的特點(diǎn)包括:
- 簡(jiǎn)單:HTTP的請(qǐng)求和響應(yīng)是基于文本的,使用簡(jiǎn)單明了的格式,易于閱讀和理解。
- 無(wú)狀態(tài):每個(gè)請(qǐng)求都是獨(dú)立的,并不會(huì)記住之前的請(qǐng)求狀態(tài),每次請(qǐng)求都需要重新驗(yàn)證身份等信息。
- 可擴(kuò)展:通過HTTP的頭部字段和方法,可以擴(kuò)展和增加功能。
- 資源定位:使用URL定位和標(biāo)識(shí)資源。
?對(duì)于htpp的請(qǐng)求和響應(yīng)對(duì)是對(duì)于的協(xié)議格式如下:
?
?文章來源地址http://www.zghlxwxcb.cn/news/detail-826218.html
2、htpp基本結(jié)構(gòu)?
2.1認(rèn)識(shí)URL
URL(Uniform Resource Locator,統(tǒng)一資源定位符)是用于標(biāo)識(shí)和定位互聯(lián)網(wǎng)上資源的字符串格式。它是Web瀏覽器、Web服務(wù)器等互聯(lián)網(wǎng)應(yīng)用程序中用來訪問資源的標(biāo)準(zhǔn)格式。
基本組成:
?
協(xié)議(Protocol):指定了訪問資源所使用的協(xié)議,如 HTTP、HTTPS、FTP 等。例如,在
http://
或https://
中,http
和https
就是協(xié)議。主機(jī)名(Host):指定了資源所在的主機(jī)(服務(wù)器)的域名或IP地址。例如,在
https://www.example.com
中,www.example.com
就是主機(jī)名。端口號(hào)(Port):指定了用于訪問資源的端口號(hào)。端口號(hào)是一個(gè)可選項(xiàng),如果未指定,則使用默認(rèn)端口。例如,在
https://www.example.com:443
中,443
就是端口號(hào)。常用的HTTP協(xié)議默認(rèn)端口號(hào)是80,HTTPS協(xié)議默認(rèn)端口號(hào)是443。路徑(Path):指定了資源在服務(wù)器上的路徑。它是資源的具體位置。例如,在
https://www.example.com/path/to/resource
中,/path/to/resource
就是路徑。查詢字符串(Query String):指定了向服務(wù)器傳遞的參數(shù)。它以
?
開頭,多個(gè)參數(shù)之間使用&
分隔。例如,在https://www.example.com/search?q=keyword&page=1
中,?q=keyword&page=1
就是查詢字符串。片段標(biāo)識(shí)符(Fragment Identifier):用于標(biāo)識(shí)資源中的一個(gè)特定部分。它以
#
開頭。例如,在https://www.example.com/page#section1
中,#section1
就是片段標(biāo)識(shí)符。
?2.2urlencode和urldecode
urlencode:urlencode
函數(shù)是用于將 URL 中的特殊字符轉(zhuǎn)換為 %xx
格式的編碼形式,其中 xx
是字符的 ASCII 碼的十六進(jìn)制表示。
我們?cè)诰W(wǎng)站搜索C++關(guān)鍵字,這時(shí)就被?urlencode解析為了c%2B%2B
urldecode:urldecode
函數(shù)則是對(duì) URL 編碼后的字符串進(jìn)行解碼,將 %xx
格式的編碼字符還原為原始字符。?
urldecode就是urlencode的逆過程;
2.3其他屬性
HTTP的方法:
GET 方法和 POST 方法是 HTTP 協(xié)議中最常用的兩種請(qǐng)求方法,它們之間有以下幾個(gè)主要區(qū)別:
數(shù)據(jù)傳輸方式:
- GET 方法:通過 URL 向服務(wù)器傳遞數(shù)據(jù)。數(shù)據(jù)被包含在 URL 的查詢字符串中,以?
?
?開頭,多個(gè)參數(shù)之間使用?&
?分隔。因此,GET 請(qǐng)求的數(shù)據(jù)在 URL 中是可見的,可以被用戶和其他應(yīng)用程序輕易看到。- POST 方法:通過 HTTP 請(qǐng)求體向服務(wù)器傳遞數(shù)據(jù)。數(shù)據(jù)不會(huì)顯示在 URL 中,而是以表單形式隱式地傳遞給服務(wù)器。因此,POST 請(qǐng)求的數(shù)據(jù)對(duì)于用戶來說是不可見的。
數(shù)據(jù)長(zhǎng)度限制:
- GET 方法:由于數(shù)據(jù)是作為 URL 的一部分傳遞的,所以傳輸?shù)臄?shù)據(jù)量受到 URL 長(zhǎng)度的限制,不同瀏覽器和服務(wù)器對(duì) URL 長(zhǎng)度的限制不同,通常在 2KB 到 8KB 之間。
- POST 方法:由于數(shù)據(jù)是通過請(qǐng)求體傳遞的,所以數(shù)據(jù)量通常沒有明確的限制,但是服務(wù)器和應(yīng)用程序可能會(huì)設(shè)置最大允許的請(qǐng)求體大小。
安全性:
- GET 方法:由于數(shù)據(jù)在 URL 中可見,因此不適合傳輸敏感數(shù)據(jù),如密碼等,因?yàn)槊舾袛?shù)據(jù)容易被截獲或篡改。
- POST 方法:由于數(shù)據(jù)不會(huì)顯示在 URL 中,因此更適合傳輸敏感數(shù)據(jù),提供了更高的安全性。
可緩存性:
- GET 方法:請(qǐng)求可被緩存,如果相同的請(qǐng)求再次發(fā)送,則可能從緩存中獲取響應(yīng),以提高性能。
- POST 方法:請(qǐng)求通常不會(huì)被緩存,因?yàn)樗鼈兛赡軐?duì)服務(wù)器產(chǎn)生更改或副作用。
注意:POST雖然比GET安全點(diǎn),但是并不意味著他是安全的?
最常見的狀態(tài)碼, 比如 200(OK), 404(Not Found), 403(Forbidden), 302(Redirect, 重定向), 504(Bad Gateway)
HTTP常見Header
- Content-Type: 數(shù)據(jù)類型(text/html等);
- Content-Length: Body的長(zhǎng)度;
- Host: 客戶端告知服務(wù)器, 所請(qǐng)求的資源是在哪個(gè)主機(jī)的哪個(gè)端口上;
- User-Agent: 聲明用戶的操作系統(tǒng)和瀏覽器版本信息;
- referer: 當(dāng)前頁(yè)面是從哪個(gè)頁(yè)面跳轉(zhuǎn)過來的;
- location: 搭配3xx狀態(tài)碼使用, 告訴客戶端接下來要去哪里訪問;
- Cookie: 用于在客戶端存儲(chǔ)少量信息. 通常用于實(shí)現(xiàn)會(huì)話(session)的功能;
二、基于Http服務(wù)器?
實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的HTTP服務(wù)器, 只在網(wǎng)頁(yè)上輸出 "自己定義的內(nèi)容"; 按照HTTP協(xié)議的要求構(gòu)造數(shù)據(jù),更好的理解htpp服務(wù)器。
1、htppserver服務(wù)器
htppserver.hpp?
#pragma once
#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <functional>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/wait.h>
#include <signal.h>
#include "Protocol.hpp"
namespace server
{
enum
{
USAGE_ERR = 1,
SOCKET_ERR,
BIND_ERR,
LISTEN_ERR
};
static const uint16_t gport = 8080;
static const int gbacklog = 5;
using func_t = std::function<bool(const HttpRequest &, HttpResponse &)>;
class HttpServer
{
public:
HttpServer(func_t func, const uint16_t &port = gport) : _func(func), _listensock(-1), _port(port)
{
}
void initServer()
{
// 1. 創(chuàng)建socket文件套接字對(duì)象
_listensock = socket(AF_INET, SOCK_STREAM, 0);
if (_listensock < 0)
{
exit(SOCKET_ERR);
}
// 2. bind綁定自己的網(wǎng)絡(luò)信息
struct sockaddr_in local;
memset(&local, 0, sizeof(local));
local.sin_family = AF_INET;
local.sin_port = htons(_port);
local.sin_addr.s_addr = INADDR_ANY;
if (bind(_listensock, (struct sockaddr *)&local, sizeof(local)) < 0)
{
exit(BIND_ERR);
}
// 3. 設(shè)置socket 為監(jiān)聽狀態(tài)
if (listen(_listensock, gbacklog) < 0) // 第二個(gè)參數(shù)backlog后面在填這個(gè)坑
{
exit(LISTEN_ERR);
}
}
void HandlerHttp(int sock)
{
// 1. 讀到完整的http請(qǐng)求
// 2. 反序列化
// 3. httprequst, httpresponse, _func(req, resp)
// 4. resp序列化
// 5. send
char buffer[4096];
HttpRequest req;
HttpResponse resp;
size_t n = recv(sock, buffer, sizeof(buffer) - 1, 0); // 大概率我們直接就能讀取到完整的http請(qǐng)求
if (n > 0)
{
buffer[n] = 0;
req.inbuffer = buffer;
req.parse();
_func(req, resp); // req -> resp
send(sock, resp.outbuffer.c_str(), resp.outbuffer.size(), 0);
}
}
void start()
{
for (;;)
{
// 4. server 獲取新鏈接
// sock, 和client進(jìn)行通信的fd
struct sockaddr_in peer;
socklen_t len = sizeof(peer);
int sock = accept(_listensock, (struct sockaddr *)&peer, &len);
if (sock < 0)
{
continue;
}
// version 2 多進(jìn)程版(2)
pid_t id = fork();
if (id == 0) // child
{
close(_listensock);
if (fork() > 0)
exit(0);
HandlerHttp(sock);
close(sock);
exit(0);
}
close(sock);
// father
waitpid(id, nullptr, 0);
}
}
~HttpServer() {}
private:
int _listensock; // 不是用來進(jìn)行數(shù)據(jù)通信的,它是用來監(jiān)聽鏈接到來,獲取新鏈接的!
uint16_t _port;
func_t _func;
};
} // namespace server
?htppserver.cc
#include "HttpServer.hpp"
#include <memory>
using namespace std;
using namespace server;
void Usage(std::string proc)
{
cerr << "Usage:\n\t" << proc << " port\r\n\r\n";
}
// 文件后綴來生成相應(yīng)的 Content-Type 字符串
std::string suffixToDesc(const std::string suffix)
{
std::string ct = "Content-Type: ";
if (suffix == ".html")
ct += "text/html";
else if (suffix == ".jpg")
ct += "application/x-jpg"; // application申請(qǐng)
ct += "\r\n";
return ct;
}
// 1. 服務(wù)器和網(wǎng)頁(yè)分離,html
// 2. url -> / : web根目錄
bool Get(const HttpRequest &req, HttpResponse &resp)
{
// for test
cout << "----------------------http start---------------------------" << endl;
cout << req.inbuffer << std::endl;
std::cout << "method: " << req.method << std::endl;
std::cout << "url: " << req.url << std::endl;
std::cout << "httpversion: " << req.httpversion << std::endl;
std::cout << "path: " << req.path << std::endl;
std::cout << "suffix: " << req.suffix << std::endl;
std::cout << "size: " << req.size << "字節(jié)" << std::endl;
cout << "----------------------http end---------------------------" << endl;
std::string respline = "HTTP/1.1 200 OK\r\n";
std::string respheader = "Content-Type: text/html\r\n";
respheader += "Set-Cookie: name=1234567abcdefg; Max-age=120\r\n"; // 這個(gè) Cookie 的最大有效期是 120 秒。
std::string respblank = "\r\n";
// std::string body = "<html lang=\"en\"><head><meta charset=\"UTF-8\"><title>for test</title><h1>hello world</h1></head><body><p>北京交通廣播《一路暢通》“交通大家談”節(jié)目,特邀北京市交通委員會(huì)地面公交運(yùn)營(yíng)管理處處長(zhǎng)趙震、北京市公安局公安交通管理局秩序處副處長(zhǎng) 林志勇、北京交通發(fā)展研究院交通規(guī)劃所所長(zhǎng) 劉雪杰為您解答公交車專用道6月1日起社會(huì)車輛進(jìn)出公交車道須注意哪些?</p></body></html>";
std::string body;
body.resize(req.size + 1);
if (!Util::readFile(req.path, (char *)body.c_str(), req.size))
Util::readFile(html_404, (char *)body.c_str(), req.size);
respheader += "Content-Length";
respheader += std::to_string(body.size());
respheader += "\r\n";
resp.outbuffer += respline;
resp.outbuffer += respheader;
resp.outbuffer += respblank;
cout << "----------------------http response start---------------------------" << endl;
std::cout << resp.outbuffer << std::endl;
cout << "----------------------http response end---------------------------" << endl;
resp.outbuffer += body;
return true;
}
// ./httpServer 8080
int main(int argc, char *argv[])
{
if (argc != 2)
{
Usage(argv[0]);
exit(0);
}
uint16_t port = atoi(argv[1]);
unique_ptr<HttpServer> httpsvr(new HttpServer(Get, port));
httpsvr->initServer();
httpsvr->start();
return 0;
}
2、Protool.hpp?
服務(wù)器的請(qǐng)求和響應(yīng)?
#pragma once
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include "Util.hpp"
const std::string sep = "\r\n";
const std::string default_root = "./wwwroot";
const std::string home_page = "index.html";
const std::string html_404 = "wwwroot/404.html";
class HttpRequest
{
public:
HttpRequest() {}
~HttpRequest() {}
void parse()
{
// 1. 從inbuffer中拿到第一行,分隔符\r\n
std::string line = Util::getOneLine(inbuffer, sep);
if (line.empty())
return;
// 2. 從請(qǐng)求行中提取三個(gè)字段
// std::cout << "line: " << line << std::endl;
std::stringstream ss(line);
ss >> method >> url >> httpversion; // method方法
// 3. 添加web默認(rèn)路徑
path = default_root; // ./wwwroot,
path += url; //./wwwroot/a/b/c.html, ./wwwroot/
if (path[path.size() - 1] == '/')
path += home_page;
// 4. 獲取path對(duì)應(yīng)的資源后綴
// ./wwwroot/index.html
// ./wwwroot/test/a.html
// ./wwwroot/image/1.jpg
auto pos = path.rfind(".");
if (pos == std::string::npos)
suffix = ".html";
else
suffix = path.substr(pos);
// 5 獲取資源大小
struct stat st; // struct stat 是用于獲取文件或文件系統(tǒng)狀態(tài)信息的結(jié)構(gòu)體
int n = stat(path.c_str(), &st);
if (n == 0)
size = st.st_size;
else
size = -1;
}
public:
std::string inbuffer;
// std::string reqline;
// std::vector<std::string> reqheader;
// std::string body;
std::string method;
std::string url;
std::string httpversion;
std::string path;
std::string suffix;
int size;
std::string parm;
};
class HttpResponse
{
public:
std::string outbuffer;
};
3、Util.hpp?
這里完成文件的讀取
#pragma once
#include <iostream>
#include <string>
#include <fstream>
#include <fcntl.h>
class Util
{
public:
// XXXX XXX XXX\r\nYYYYY
// 找到空行的出現(xiàn)
static std::string getOneLine(std::string &buffer, const std::string &sep)
{
auto pos = buffer.find(sep);
if (pos == std::string::npos)
return "";
std::string sub = buffer.substr(0, pos);
buffer.erase(0, sub.size() + sep.size());
return sub;
}
static bool readFile(const std::string resource, char *buffer, int size)
{
std::ifstream in(resource, std::ios::binary); // 讀取文件
if (!in.is_open())
return false;
in.read(buffer, size);
in.close();
return close;
}
};
4、wwwroot
?在這里完成網(wǎng)站的設(shè)計(jì),這里注意使用的是Html
網(wǎng)站的首頁(yè)
網(wǎng)頁(yè)中我們?cè)O(shè)計(jì)二個(gè)板塊新聞,電商,梅花圖片,賬號(hào)密碼的設(shè)計(jì)?。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>我的首頁(yè)</title>
</head>
<body>
<h1>我是網(wǎng)站的首頁(yè)</h1>
<!-- <img src="https://img1.baidu.com/it/u=2812417321,4100104782&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=750" alt="石榴花"> -->
<!-- <a ></a> -->
<a href="/test/a.html">新聞</a>
<a href="/test/c.html">電商</a>
<img src="/image/1.jpg" alt="梅花">
<form action="/a/b/c.py" method="POST">
姓名:<br>
<input type="text" name="xname">
<br>
密碼:<br>
<input type="password" name="ypwd">
<br><br>
<input type="submit" value="登陸">
</form>
</body>
</html>
網(wǎng)站新聞設(shè)計(jì)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>a網(wǎng)頁(yè)</title>
</head>
<body>
<h1>我是a網(wǎng)頁(yè),負(fù)責(zé)新聞的入口</h1>
<a href="/">返回</a>
</body>
</html>
?網(wǎng)站的電商設(shè)計(jì)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>b網(wǎng)頁(yè)</title>
</head>
<body>
<h1>我是b網(wǎng)頁(yè),負(fù)責(zé)電商的入口</h1>
<a href="/">返回</a>
</body>
</html>
?網(wǎng)站報(bào)錯(cuò)誤
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>資源不存在</title>
</head>
<body>
<h1>你所訪問的資源并不存在,404!</h1>
</body>
</html>
5、程序運(yùn)行后的細(xì)節(jié)
服務(wù)器運(yùn)行后,我們?cè)诰W(wǎng)站上輸入自己的主機(jī)號(hào):端口號(hào)?
?當(dāng)我們點(diǎn)擊新聞時(shí)候,會(huì)跳轉(zhuǎn)在新聞網(wǎng)站,這是對(duì)應(yīng)的是Http的長(zhǎng)鏈接
HTTP協(xié)議中的長(zhǎng)連接(Keep-Alive)是一種在單個(gè)TCP連接上可以傳送多個(gè)HTTP請(qǐng)求和響應(yīng)的機(jī)制。在默認(rèn)情況下,HTTP/1.0 版本中的每個(gè)請(qǐng)求/響應(yīng)交互都需要建立一個(gè)新的TCP連接,處理完成后即關(guān)閉連接。而長(zhǎng)連接則允許在一次TCP連接中傳輸多個(gè)請(qǐng)求和響應(yīng),而不需要每次都重新建立連接。
賬號(hào)輸入密碼,我們就可以進(jìn)行跳轉(zhuǎn)
?Htpp協(xié)議的會(huì)話保持
HTTP協(xié)議的會(huì)話保持是一種機(jī)制,用于在客戶端和服務(wù)器之間保持持久的連接狀態(tài),使得在多個(gè)HTTP請(qǐng)求之間能夠保持同一個(gè)會(huì)話的相關(guān)信息。通常,會(huì)話保持是通過使用Cookie或者URL重寫的方式實(shí)現(xiàn)的。
Cookie:
- Cookie 是一種在客戶端存儲(chǔ)的小型數(shù)據(jù)片段,由服務(wù)器通過 HTTP 響應(yīng)頭發(fā)送給客戶端,客戶端會(huì)將其保存起來,在以后的請(qǐng)求中通過 HTTP 請(qǐng)求頭發(fā)送給服務(wù)器。
- 通過在客戶端存儲(chǔ)會(huì)話標(biāo)識(shí)符等信息,服務(wù)器可以在多個(gè)HTTP請(qǐng)求之間識(shí)別出同一個(gè)用戶的會(huì)話,并保持會(huì)話狀態(tài)。
- 使用 Cookie 的方式可以實(shí)現(xiàn)更加靈活和復(fù)雜的會(huì)話管理,例如,可以存儲(chǔ)用戶的登錄狀態(tài)、購(gòu)物車信息等。
URL 重寫:
- URL 重寫是一種在URL中包含會(huì)話標(biāo)識(shí)符的方式,通過在每個(gè)URL后面添加會(huì)話標(biāo)識(shí)符參數(shù)來實(shí)現(xiàn)會(huì)話保持。
- 服務(wù)器會(huì)將會(huì)話標(biāo)識(shí)符作為參數(shù)附加在URL后面,客戶端在每個(gè)請(qǐng)求中都需要將該標(biāo)識(shí)符帶回服務(wù)器。
- 雖然URL重寫可以實(shí)現(xiàn)基本的會(huì)話保持,但其缺點(diǎn)是會(huì)在URL中暴露會(huì)話信息,可能存在安全隱患,并且會(huì)導(dǎo)致URL的長(zhǎng)度增加,影響可讀性。
?文章來源:http://www.zghlxwxcb.cn/news/detail-826218.html
?
Linux命令?
?mv
是 Linux 和 Unix 操作系統(tǒng)中用于移動(dòng)或重命名文件和目錄的命令。它的基本語(yǔ)法如下:
mv [options] source destination
?mv
命令選項(xiàng)包括:
-i, --interactive: 在執(zhí)行前進(jìn)行交互式確認(rèn),防止覆蓋已存在的目標(biāo)文件。
-u, --update: 僅在源文件比目標(biāo)文件新或目標(biāo)文件不存在時(shí)才執(zhí)行移動(dòng)操作。
-b, --backup[=CONTROL]: 在移動(dòng)文件前進(jìn)行備份,可以指定備份的方式,如 -b 或 -b=numbered。
-f, --force: 強(qiáng)制執(zhí)行移動(dòng)操作,即使目標(biāo)文件已存在,也會(huì)覆蓋。
例子:?
1 將文件從一個(gè)目錄移動(dòng)到另一個(gè)目錄:
mv /path/to/sourcefile /path/to/destination/
2 重命名文件:?
mv oldfile.txt newfile.txt
3?移動(dòng)并覆蓋目標(biāo)文件
mv -f sourcefile.txt /path/to/destination/
4 移動(dòng)目錄:
mv /path/to/sourcedir /path/to/destination/
?
?
?
?
到了這里,關(guān)于[計(jì)算機(jī)網(wǎng)絡(luò)]---Http協(xié)議的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!