文章851
标签121
分类10

Linux 分区下误删的文件恢复

在 Linux 系统中,误删文件时,恢复文件的难度和成功率取决于多种因素,包括文件系统类型、删除文件后的操作等。以下是恢复误删文件的步骤和方法。

1. 理解文件删除原理

在 Linux 中,删除文件时,操作系统只是将文件的指针从文件系统中移除,文件数据仍然存在于磁盘上,直到被新的数据覆盖。因此,尽快采取恢复措施是非常重要的。

2. 检查是否有备份

在尝试恢复之前,检查是否有任何备份(如 rsynctarcp 等)。恢复备份是最直接的方法。

3. 恢复工具

如果没有备份,可以使用以下工具尝试恢复误删的文件。

3.1 extundelete

extundelete 是一个用于恢复 ext3/ext4 文件系统中删除文件的工具。

安装

在 Debian/Ubuntu 系统上:

sudo apt install extundelete

在 CentOS/RHEL 系统上:

sudo yum install extundelete

使用

  1. 卸载文件系统:在恢复前,确保文件系统未挂载。

    sudo umount /dev/sdX1  # 替换为实际设备
  2. 恢复文件

    sudo extundelete /dev/sdX1 --restore-file /path/to/deleted/file

    或者恢复整个目录:

    sudo extundelete /dev/sdX1 --restore-directory /path/to/deleted/directory
  3. 查看恢复结果:恢复的文件将保存在当前目录下的 RECOVERED_FILES 目录中。

3.2 photorec

photorec 是一个强大的数据恢复工具,适用于多种文件系统。

安装

在 Debian/Ubuntu 系统上:

sudo apt install testdisk

使用

  1. 启动 photorec

    sudo photorec /dev/sdX  # 替换为实际设备
  2. 选择分区:选择您要恢复文件的分区。
  3. 选择文件系统类型:选择适当的文件系统类型。
  4. 选择恢复选项:选择文件恢复的选项(如 WholeFree)。
  5. 选择目标目录:选择将恢复的文件保存到的位置。
  6. 开始恢复:执行恢复操作,等待完成。

4. 恢复后的注意事项

  • 避免写入新数据:在恢复过程中,尽量避免在目标磁盘上写入新数据,以提高恢复成功率。
  • 保存恢复文件的位置:将恢复的文件保存到与原文件不同的设备或分区,以避免覆盖原始数据。

5. 预防措施

为了避免未来误删文件带来的问题,可以采取以下预防措施:

  • 定期备份:定期使用 rsynctar 等工具进行备份。
  • 使用版本控制:使用 Git 等工具管理重要文件的版本。
  • 小心使用 rm 命令:可以使用 rm -i 提示确认删除,或者使用 trash-cli 工具将文件移入回收站。

在 Ajax 请求中添加 Token 到请求头

在使用 Ajax 进行 HTTP 请求时,通常需要添加一个身份验证令牌(Token)到请求头,以确保安全性。以下是如何在不同的 JavaScript 库和原生 JavaScript 中添加 Token 的示例。

1. 使用 jQuery 的 Ajax 请求

如果您使用 jQuery 来发送 Ajax 请求,可以通过 beforeSend 函数添加请求头。

示例

$.ajax({
    url: 'https://api.example.com/data',
    type: 'GET',
    beforeSend: function(xhr) {
        xhr.setRequestHeader('Authorization', 'Bearer YOUR_TOKEN_HERE');
    },
    success: function(data) {
        console.log('成功:', data);
    },
    error: function(jqXHR, textStatus, errorThrown) {
        console.error('错误:', textStatus, errorThrown);
    }
});

2. 使用 Fetch API

如果您使用 Fetch API,可以在请求选项中直接添加请求头。

示例

fetch('https://api.example.com/data', {
    method: 'GET',
    headers: {
        'Authorization': 'Bearer YOUR_TOKEN_HERE',
        'Content-Type': 'application/json'
    }
})
.then(response => {
    if (!response.ok) {
        throw new Error('网络错误');
    }
    return response.json();
})
.then(data => {
    console.log('成功:', data);
})
.catch(error => {
    console.error('错误:', error);
});

3. 使用 Axios

如果您使用 Axios 库来发送请求,可以在请求配置中添加请求头。

示例

axios.get('https://api.example.com/data', {
    headers: {
        'Authorization': 'Bearer YOUR_TOKEN_HERE'
    }
})
.then(response => {
    console.log('成功:', response.data);
})
.catch(error => {
    console.error('错误:', error);
});

PHP GeoIP2 初体验

GeoIP2 是一个强大的工具,用于根据 IP 地址获取地理位置信息。通过 PHP,可以方便地集成 GeoIP2 来分析访问者的地理位置。以下是关于如何在 PHP 中使用 GeoIP2 的初步指南。

1. 环境准备

1.1 安装 Composer

如果您还没有安装 Composer,可以从 Composer 官方网站 下载并安装。

1.2 安装 GeoIP2 库

在您的项目目录中使用 Composer 安装 GeoIP2:

composer require geoip2/geoip2

1.3 下载 GeoIP2 数据库

访问 MaxMind 官网 并下载 GeoLite2 数据库(如 GeoLite2-City.mmdb)。将下载的文件放在项目目录中。

2. 编写 PHP 代码

以下是一个简单的示例,展示如何使用 GeoIP2 获取访问者的地理位置信息。

2.1 基本示例

<?php
require 'vendor/autoload.php';

use GeoIp2\Database\Reader;

// 创建 GeoIP2 数据库读取器
$reader = new Reader('path/to/GeoLite2-City.mmdb'); // 替换为您的数据库文件路径

// 获取访问者 IP 地址
$ipAddress = $_SERVER['REMOTE_ADDR']; // 在实际部署中使用真实 IP

try {
    // 获取地理位置信息
    $record = $reader->city($ipAddress);
    
    echo "IP 地址: " . $ipAddress . "\n";
    echo "国家: " . $record->country->name . "\n";
    echo "地区: " . $record->mostSpecificSubdivision->name . "\n";
    echo "城市: " . $record->city->name . "\n";
    echo "邮政编码: " . $record->postal->code . "\n";
    echo "纬度: " . $record->location->latitude . "\n";
    echo "经度: " . $record->location->longitude . "\n";
} catch (Exception $e) {
    echo "获取地理位置信息失败: " . $e->getMessage();
}
?>

2.2 处理本地开发环境

如果您在本地开发环境中测试,可能会看到 127.0.0.1::1 的 IP 地址。要测试 GeoIP2,您可以使用真实的公共 IP 地址,或者在生产环境中使用。

3. 额外功能

GeoIP2 提供了丰富的信息,除了基本的地理位置数据外,还可以获取 ISP、组织等信息。

3.1 获取额外信息

echo "ISP: " . $record->traits->isp . "\n";
echo "组织: " . $record->traits->organization . "\n";

4. 错误处理

确保在使用 try-catch 块中处理异常,以避免因无效 IP 或数据库问题而导致的错误。

JS JSON 源码格式化与压缩转换方法

在 JavaScript 中,处理 JSON 数据时,通常需要格式化和压缩。这可以通过多种方法来实现,下面将介绍常用的几种方法。

1. JSON 格式化

JSON 格式化通常用于美化 JSON 数据,使其更易于阅读。您可以使用以下方法进行格式化:

1.1 使用 JSON.stringify

JSON.stringify 方法可以将 JavaScript 对象转换为 JSON 字符串,并使用可选的参数进行格式化。

例子:

const jsonData = {
    name: "Alice",
    age: 30,
    city: "Wonderland",
    hobbies: ["reading", "traveling"]
};

// 格式化 JSON
const formattedJson = JSON.stringify(jsonData, null, 4); // 4 表示缩进空格数
console.log(formattedJson);

1.2 使用在线工具

有许多在线工具可以格式化 JSON,例如:

您只需将 JSON 数据粘贴到这些工具中,点击格式化按钮即可。

2. JSON 压缩

JSON 压缩用于减小 JSON 数据的大小,通常通过去除空格和换行符实现。您可以使用以下方法进行压缩:

2.1 使用 JSON.stringify

使用 JSON.stringify 时,可以省略第二个参数和第三个参数,以生成压缩的 JSON 字符串。

例子:

const jsonData = {
    name: "Alice",
    age: 30,
    city: "Wonderland",
    hobbies: ["reading", "traveling"]
};

// 压缩 JSON
const compressedJson = JSON.stringify(jsonData); // 默认无格式化
console.log(compressedJson);

2.2 使用在线工具

同样,有许多在线工具可以压缩 JSON,例如:

将您的 JSON 数据粘贴到这些工具中,点击压缩按钮即可。

3. 使用 Node.js 进行格式化与压缩

如果您在使用 Node.js,可以编写简单的脚本来格式化和压缩 JSON 数据。

3.1 格式化示例

const fs = require('fs');

const jsonData = {
    name: "Alice",
    age: 30,
    city: "Wonderland",
    hobbies: ["reading", "traveling"]
};

// 格式化 JSON
const formattedJson = JSON.stringify(jsonData, null, 4);
fs.writeFileSync('formatted.json', formattedJson);

3.2 压缩示例

const fs = require('fs');

const jsonData = {
    name: "Alice",
    age: 30,
    city: "Wonderland",
    hobbies: ["reading", "traveling"]
};

// 压缩 JSON
const compressedJson = JSON.stringify(jsonData);
fs.writeFileSync('compressed.json', compressedJson);

4. 使用库进行格式化与压缩

在某些情况下,您可能希望使用库来处理 JSON 数据,比如 jsonlintjsonminify

4.1 安装库

npm install jsonlint jsonminify

4.2 使用库

const jsonlint = require("jsonlint");
const jsonminify = require("jsonminify");

const jsonData = '{"name":"Alice","age":30,"city":"Wonderland","hobbies":["reading","traveling"]}';

// 格式化
const formattedJson = jsonlint.parse(jsonData);
console.log(JSON.stringify(formattedJson, null, 4));

// 压缩
const compressedJson = jsonminify(jsonData);
console.log(compressedJson);

国家气象局提供的天气预报接口

">