Aaron Kili 发布的文章

在 Linux 和其他的类 Unix 操作系统中,只有 root 用户可以运行所有的命令,才能在系统中执行那些需要鉴权的操作,比如安装、升级和移除软件包、创建用户和用户组、修改系统重要的配置文件等等。

然而,系统管理员,比如说 root 用户,可以通过 sudo 命令 和一些配置选项来给普通用户进行授权,从而让该普通用户可以运行某些命令已经上述的那些相当重要的系统级操作。

另外,系统管理员还可以分享 root 用户密码 (这个做法是不值得提倡的),这样普通用户就可以通过 su 命令来转化为 root 用户角色。.

sudo 允许已授权用户按照指定的安全策略、以 root 用户 (或者是其他的用户角色) 权限来执行某个命令。

  1. sudo 会读取和解析 /etc/sudoers 文件,查找调用命令的用户及其权限。
  2. 然后提示调用该命令的用户输入密码 (通常是用户密码,但也可能是目标用户的密码,或者也可以通过 NOPASSWD 标志来跳过密码验证)。
  3. 这之后, sudo 会创建一个子进程,调用 setuid() 来切换到目标用户。
  4. 接着,它会在上述子进程中执行参数给定的 shell 或命令。

以下列出十个 /etc/sudoers 文件配置,使用 Defaults 项修改 sudo 命令的行为。

$ sudo cat /etc/sudoers

/etc/sudoers 文件:

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults    env_reset
Defaults    mail_badpass
Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Defaults    logfile="/var/log/sudo.log"
Defaults    lecture="always"
Defaults    badpass_message="Password is wrong, please try again"
Defaults    passwd_tries=5
Defaults    insults
Defaults    log_input,log_output

Defaults 项的类型

Defaults                parameter,   parameter_list     ### 对任意主机登录的所有用户起作用
Defaults@Host_List      parameter,   parameter_list     ### 对指定主机登录的所有用户起作用
Defaults:User_List      parameter,   parameter_list     ### 对指定用户起作用
Defaults!Cmnd_List      parameter,   parameter_list     ### 对指定命令起作用
Defaults>Runas_List     parameter,   parameter_list     ### 对以指定目标用户运行命令起作用

在本文讨论范围内,我们下面的将以第一个 Defaults 作为基准来参考。parameter 参数可以是标记 (flags)、整数值或者是列表 (list)。

值得注意的是,标记 (flag) 是指布尔类型值,可以使用 ! 操作符来进行取反,列表 (list) 有两个赋值运算符:+= (添加到列表) 和 -= (从列表中移除)。

Defaults     parameter
或
Defaults     parameter=值
或
Defaults     parameter -=值
Defaults     parameter +=值
或
Defaults     !parameter

1、 安置一个安全的 PATH 环境变量

PATH 环境变量应用于每个通过 sudo 执行的命令,需要注意两点:

  1. 当系统管理员不信任 sudo 用户,便可以设置一个安全的 PATH 环境变量。
  2. 该设置将 root 的 PATH 和用户的 PATH 分开,只有在 exempt_group 组的用户不受该设置的影响。

可以添加以下内容来设置:

Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

2、 允许 tty 用户会话使用 sudo

该设置允许在一个真实的 tty 中进行调用 sudo,但不允许通过 cron 或者 cgi-bin 脚本等方法来调用。添加以下内容来设置:

Defaults  requiretty   

3、 使用 pty 运行 sudo 命令

少数情况下,攻击者可以通过 sudo 来运行一个恶意程序 (比如病毒或者恶意代码),这种恶意程序可能会分叉出一个后台运行的进程,即使主程序完成执行,它仍能够运行在用户的终端设备上。

为了防止出现这样的情况,你可以通过 use_pty 参数来设置 sudo 使用伪终端来运行其他命令,而不必管 I/O 日志的开启状态。如下:

Defaults  use_pty

4、 创建 sudo 日志文件

默认下,sudo 通过 syslog(3) 来记录到日志。但是我们可以通过 logfile 参数来指定一个自定义的日志文件。如下:

Defaults  logfile="/var/log/sudo.log"

使用 log_hostlog_year 参数可以对应记录日志主机名和 4 位数年份到自定义日志文件。如下:

Defaults  log_host, log_year, logfile="/var/log/sudo.log"

下面是自定义 sudo 日志文件的例示:

Create Custom Sudo Log File

创建 sudo 日志文件

5、 记录 sudo 命令的输入/输出

log_inputlog_output 参数可以让 sudo 命令运行在伪终端,并可以对应地记录所有的用户输入和输出到屏幕上。

默认的 I/O 日志目录为 /var/log/sudo-io,如果存在会话序列号,它将被存储到该目录。你可以通过 iolog_dir 参数来指定一个目录。

Defaults   log_input, log_output

这其中支持转义字符,像 %{seq} —— 以 36 为基数的单调递增序列,比如 000001,这里每两个数字都分别用来形成一个新目录。请看下边例示 00/00/01:

$ cd /var/log/sudo-io/
$ ls
$ cd  00/00/01
$ ls
$ cat log

Log sudo Input Output

记录 sudo 命令的输入/输出

cat 命令 来查看该目录的其余部分。

6、 为 sudo 用户提示命令用法

如下,使用 lecture 参数可以在系统中为 sudo 用户提示命令的用法:

参数属性值有三个选择:

  1. always – 一直提示
  2. once – 用户首次运行 sudo 时提示 (未指定参数属性值时的默认值)
  3. never – 从不提示
Defaults  lecture="always"

此外,你还可以使用 lecture_file 参数类自定义提示内容,在指定的文件中输入适当的提示内容即可:

Defaults  lecture_file="/path/to/file"

Lecture Sudo Users

为 sudo 用户提示命令用法

7、 输入错误的 sudo 密码是显示自定义信息

当某个用户输错密码时,会有一个对应的信息显示在屏幕上。默认是“抱歉,请重新尝试。(sorry, try again)”,你可以通过 badpass_message 参数来修改该信息:

Defaults  badpass_message="Password is wrong, please try again"

8、 增加 sudo 密码尝试限制次数

passwd_tries 参数用于指定用户尝试输入密码的次数。

默认为 3。

Defaults   passwd_tries=5

Increase Sudo Password Attempts

增加 sudo 密码尝试限制次数

使用 passwd_timeout 参数设置密码超时 (默认为 5 分钟),如下:

Defaults   passwd_timeout=2

9、 在输错密码时让 sudo 羞辱用户

使用了 insults 参数之后,一旦你输出了密码,sudo 便会在命令窗口中显示羞辱你的信息。这个参数会自动关闭 badpass_message 参数。

Defaults  insults

Let's Sudo Insult You When Enter Wrong Password

在输错密码时让 sudo 羞辱用户

10、 更多关于 sudo 的配置

此外,欲了解更多 sudo 命令的配置,请自行阅读:su 与 sudo 的差异以及如何配置 sudo

文毕。你也可以在评论区分享其他有用的 sudo 配置或者 Linux 技巧


作者简介:Aaron Kili 是一名 Linux 和 F.O.S.S 忠实拥护者、高级 Linux 系统管理员、Web 开发者,目前在 TecMint 是一名活跃的博主,热衷于计算机并有着强烈的只是分享意愿。

译者简介:GHLandy —— 欲得之,则为之奋斗。 If you want it, work for it.


via: http://www.tecmint.com/sudoers-configurations-for-setting-sudo-in-linux/

作者:Aaron Kili 译者:GHLandy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

运行一条命令时,它都会产生某种输出:要么是该命令的期望结果,或者是该命令执行细节的状态/错误消息。有些时候,你可能想要将某个命令的输出内容存储在一个变量中,以待在后续操作中取出来使用。

本文将介绍将 shell 命令赋值给变量的不同方法,这对于 shell 脚本编程是特别有用的。

可以使用如下形式的 shell 命令置换特性,将命令的输出存储到变量中:

变量名=$(命令)
变量名=$(命令 [命令选项 ...] 参数1 参数2 ...)
或者:
变量名=`命令`
变量名=`命令 [命令选项 ...] 参数1 参数2 ...`

以下是使用命令置换特性的示例:

本例,我们将 who (显示当前登录系统的用户) 的输出值存储到 CURRENT_USERS 变量中:

$ CURRENT_USERS=$(who)

然后,我们可以使用 echo 命令 显示一个句子并使用上述变量,如下:

$ echo -e "以下为登录到系统中的用户:\n\n $CURRENT_USERS"

上面的命令中:-e 标记表示解释所有的转义序列 (如 \n 为换行)。为节约时间和内存,通常在 echo 命令 中直接使用命令置换特性,如下:

$ echo -e "以下为登录到系统中的用户:\n\n $(who)"

显示当前登录系统的用户

在 Linux 中显示当前登录系统的用户

接下来,为了演示上面提到的第二种形式,我们以把当前工作目录下文件数存储到变量 FILES ,然后使用 echo 来输出,如下:

$ FILES=`sudo find . -type f -print | wc -l`
$ echo "当前目录有 $FILES 个文件。"

显示目中包含文件的数量

显示目中包含文件的数量

就是这些了。我们展示了将 shell 命令的输出赋值给变量的方法。你可以在下边的评论反馈区留下你的想法。


作者简介:

Aaron Kili 是一名 Linux 和 F.O.S.S 忠实拥护者、未来的 Linux 系统管理员、Web 开发者,目前是 TecMint 的原创作者,热衷于计算机并乐于知识分享。

译者简介:

GHLandy —— 欲得之,则为之奋斗。 If you want it, work for it.


作者:Aaron Kili 译者:GHLandy 校对:jasminepeng

本文由 LCTT 原创编译,Linux中国 荣誉推出

sudoers 是 Linux 中的默认 sudo 安全策略插件,但是经验丰富的系统管理员可以自定义安全策略以及输入输出日志记录的插件。它由 /etc/sudoers 这个文件驱动,或者也可在 LDAP 中。

你可以在上面的文件中定义 sudoers 嘲讽 insults 或其他选项。它在 defaults 部分下设置。请阅读我们的上一篇文章在 Linux 中设置 sudo 时 10 个有用的 sudoers 配置

在本文中,我们将解释一个 sudoers 配置参数,以允许个人或系统管理员设置 sudo 命令,当系统用户输入错误密码时“嘲讽”他们。

首先打开文件 /etc/sudoers,如下所示:

$ sudo visudo

进入 defaults 部分,并添加下面的行:

Defaults   insults

下面是我系统中 /etc/sudoers 默认展示的 defaults 部分。

Set sudo Insults Parameter

设置 sudo insults 参数

从上面的截图中,你可以看到 defaults 中还有许多其他默认值定义,例如,每次用户输入错误的密码时发送邮件到 root、设置安全路径、配置自定义 sudo 日志文件等。

保存并关闭文件。

运行 sudo 命令并输入错误的密码,然后观察 insults 选项是如何工作的:

$ sudo visudo

sudo Insult in Action

实践 sudo insult

注意:当配置 insults 参数时,它会禁用 badpass_message 参数,该参数在用户输入错误的密码时,会在命令行中输出特定的消息(默认消息为 “sorry, try again”)。

要修改该消息,请将 badpass_message 参数添加到 /etc/sudoers 文件中,如下所示。

Defaults  badpass_message="Password is wrong, please try again"  #try to set a message of your own

Set sudo badpassword Message

设置 sudo 错误密码消息

保存并关闭文件,然后调用 sudo 查看它是如何工作的,你设置的 badpass_message 消息会在每次你或任何系统用户输入错误的密码的时候打印出来。

$ sudo visudo

Sudo badpassword Message

sudo 密码错误消息

就是这样了,在本文中,我们回顾了如何在用户输入错误的密码时将 sudo 设置为显示嘲讽。请通过下面的评论栏分享你的想法。


作者简介:

Aaron Kili 是 Linux 和 F.O.S.S 爱好者,将来的 Linux SysAdmin、web 开发人员,目前是 TecMint 的内容创建者,他喜欢用电脑工作,并坚信分享知识。


via: http://www.tecmint.com/sudo-insult-when-enter-wrong-password/

作者:Aaron Kili 译者:geekpi 校对:jasminepeng

本文由 LCTT 原创编译,Linux中国 荣誉推出

Linux 管理的一个最重要并且有趣的话题是 I/O 重定向。此功能在命令行中使你能够将命令的输入输出取自或送到文件中,或者可以使用管道将多个命令连接在一起以形成所谓的“命令管道”。

我们运行的所有命令基本上产生两种输出:

  • 命令结果 - 程序产生的数据,以及
  • 程序状态和错误消息,用来通知用户程序的执行细节。

在 Linux 和其他类 Unix 系统中,有三个默认文件(名称如下),这些文件也由 shell 使用文件描述符号标识:

  • stdin 或 0 - 它连接键盘,大多数程序从此文件读取输入。
  • stdout 或 1 - 它连接屏幕,并且所有程序将其结果发送到此文件
  • stderr 或 2 - 程序将状态/错误消息发送到此文件,它也连接到屏幕上。

因此,I/O 重定向允许你更改命令的输入源以及将输出和错误消息发送到其他地方。这可以通过 <> 重定向操作符来实现。

如何在 Linux 中重定向标准输出到文件中

如下面的示例所示,你可以重定向标准输出,这里,我们要存储 top 命令的输出以供以后检查:

$ top -bn 5 >top.log

其中标志的含义:

  • -b - 让 top 以批处理模式运行,以便你可以将其输出重定向到一个文件或另一个命令。
  • -n - 指定命令终止前的迭代次数。

你可以使用 cat 命令来查看 top.log 文件的内容:

$ cat top.log

要将命令输出附加在文件后面,请使用 >> 操作符。

例如,要将 top 命令的输出追加在上面的 top.log 文件中,特别是在脚本(或命令行)中,请输入下面的那行:

$ top -bn 5 >>top.log

注意: 也可以使用文件描述符数字,上面的重定向命令等同于:

$ top -bn 5 1>top.log

如何在 Linux 中重定向标准错误到文件中

要重定向命令的标准错误,你需要明确指定文件描述符 2,以便让 shell 了解你正在尝试做什么。

例如,下面的 ls 命令将在没有 root 权限的普通系统用户执行时产生错误:

$ ls -l /root/

你可以重定向标准错误到文件中:

$ ls -l /root/ 2>ls-error.log
$ cat ls-error.log 

Redirect Standard Error to File

重定向标准错误到文件中

为了将标准错误附加在文件后,使用下面的命令:

$ ls -l /root/ 2>>ls-error.log

如何重定向标准输出及标准错误到一个文件中

还可以将命令的所有输出(包括标准输出和标准错误)捕获到单个文件中。这可以用两种可能的方式,通过指定文件描述符来完成:

1、 第一种是相对较旧的方法,其工作方式如下:

$ ls -l /root/ >ls-error.log 2>&1

上面的命令意思是 shell 首先将 ls 命令的输出发送到文件 ls-error.log(使用 >ls-error.log),然后将所有写到文件描述符 2(标准错误)的错误消息重定向到文件 ls-error.log(使用2>&1)中。(LCTT 译注:此处原文有误,径改。)这表示标准错误也被发送到与标准输出相同的文件中。

2、 第二种并且更直接的方法是:

$ ls -l /root/ &>ls-error.log

你也可以这样将标准输出和标准错误附加到单个文件后:

$ ls -l /root/ &>>ls-error.log

如何将标准输入重定向到文件中

大多数(如果不是全部)命令从标准输入获得其输入,并且标准输入默认连接到键盘。

要从键盘以外的文件重定向标准输入,请使用 < 操作符,如下所示:

$ cat <domains.list 

Redirect Standard Input to File

重定向文件到标准输入中

如何重定向标准输入/输出到文件中

你可以如下在 sort 命令中同时执行标准输入、标准输出的重定向:

$ sort <domains.list >sort.output

如何使用管道进行 I/O 重定向

要将一个命令的输出重定向为另一个命令的输入,你可以使用管道,这是用于构建复杂操作命令的有力方法。

例如,以下命令将列出最近修改的前五个文件

$ ls -lt | head -n 5 

选项的意思是:

构建管道的重要命令

在这里,我们将简要回顾一下构建命令管道的两个重要命令,它们是:

xargs 用于从标准输入构建和执行命令行。下面是使用 xargs 的管道示例,此命令用于将文件复制到 Linux 中的多个目录

$ echo /home/aaronkilik/test/ /home/aaronkilik/tmp | xargs -n 1 cp -v /home/aaronkilik/bin/sys_info.sh

Copy Files to Multiple Directories

复制文件到多个目录

选项含义:

有关更多的使用选项和信息,请阅读 xargs 手册页:

$ man xargs 

tee 命令从标准输入读取,并写入到标准输出和文件中。我们可以演示 tee 如何工作:

$ echo "Testing how tee command works" | tee file1 

tee Command Example

tee 命令示例

文件或文本过滤器通常与管道一起用于有效地操作 Linux 文件,来以强大的方式来处理信息,例如命令的重组输出(这对于生成有用的 Linux 报告是必不可少的)、修改文件中的文本和其他的 Linux 系统管理任务。

要了解有关 Linux 过滤器和管道的更多信息,请阅读这篇文章查找前十个访问 Apache 服务器的 IP 地址,这里展示了使用过滤器和管道的一个例子。

在本文中,我们解释了 Linux 中 I/O 重定向的基本原理。请通过下面的反馈栏分享你的想法。


作者简介:

Aaron Kili 是 Linux 和 F.O.S.S 爱好者,将来的 Linux SysAdmin、web 开发人员,目前是 TecMint 的内容创建者,他喜欢用电脑工作,并坚信分享知识。


via: http://www.tecmint.com/linux-io-input-output-redirection-operators/

作者:Aaron Kili 译者:geekpi 校对:jasminepeng

本文由 LCTT 原创编译,Linux中国 荣誉推出

在大多数情况下,我们习惯于使用 Delete 键、垃圾箱或 rm 命令从我们的计算机中删除文件,但这不是永久安全地从硬盘中(或任何存储介质)删除文件的方法。

该文件只是对用户隐藏,它驻留在硬盘上的某个地方。它有可能被数据窃贼、执法取证或其它方式来恢复。

假设文件包含密级或机密内容,例如安全系统的用户名和密码,具有必要知识和技能的攻击者可以轻松地恢复删除文件的副本并访问这些用户凭证(你可以猜测到这种情况的后果)。

在本文中,我们将解释一些命令行工具,用于永久并安全地删除 Linux 中的文件。

1、 shred – 覆盖文件来隐藏内容

shred 会覆盖文件来隐藏它的内容,并且也可以选择删除它。

$ shred -zvu -n  5 passwords.list

在下面的命令中,选项有:

  1. -z - 用零覆盖以隐藏碎片
  2. -v - 显示操作进度
  3. -u - 在覆盖后截断并删除文件
  4. -n - 指定覆盖文件内容的次数(默认值为3)

shred - overwrite a file to hide its contents

shred - 覆盖文件来隐藏它的内容

你可以在 shred 的帮助页中找到更多的用法选项和信息:

$ man shred

2、 wipe – 在 Linux 中安全删除文件

wipe 命令可以安全地擦除磁盘中的文件,从而不可能恢复删除的文件或目录内容

首先,你需要安装 wipe 工具,运行以下适当的命令:

$ sudo apt-get install wipe   [Debian 及其衍生版]
$ sudo yum install wipe       [基于 RedHat 的系统]

下面的命令会销毁 private 目录下的所有文件。

$ wipe -rfi private/*

当使用下面的标志时:

  1. -r - 告诉 wipe 递归地擦除子目录
  2. -f - 启用强制删除并禁用确认查询
  3. -i - 显示擦除进度

Wipe - Securely Erase Files in Linux

wipe – 在 Linux 中安全擦除文件

注意:wipe 仅可以在磁性存储上可以可靠地工作,因此对固态磁盘(内存)请使用其他方法。

阅读 wipe 手册以获取其他使用选项和说明:

$ man wipe

3、 Linux 中的安全删除工具集

secure-delete 是一个安全文件删除工具的集合,它包含用于安全删除文件的 srm(secure\_deletion)工具。

首先,你需要使用以下相关命令安装它:

$ sudo apt-get install secure-delete   [Debian 及其衍生版]
$ sudo yum install secure-delete       [基于 RedHat 的系统]

安装完成后,你可以使用 srm 工具在 Linux 中安全地删除文件和目录。

$ srm -vz private/*

下面是使用的选项:

  1. -v – 启用 verbose 模式
  2. -z – 用0而不是随机数据来擦除最后的写入

srm - Securely Delete Files in Linux

srm – 在 Linux 中安全删除文件

阅读 srm 手册来获取更多的使用选项和信息:

$ man srm

4、 sfill -安全免费的磁盘 / inode 空间擦除器

sfill 是 secure-deletetion 工具包的一部分,是一个安全免费的磁盘和 inode 空间擦除器,它以安全的方法删除可用磁盘空间中的文件。 sfill检查指定分区上的可用空间,并使用来自 /dev/urandom 的随机数据填充它。

以下命令将在我的根分区上执行 sfill,使用 `-v' 选项启用 verbose 模式:

$ sudo sfill -v /home/aaronkilik/tmp/

假设你创建了一个单独的分区 /home 来存储正常的系统用户主目录,你可以在该分区上指定一个目录,以便在其上应用 sfill

$ sudo sfill -v /home/username

你可以在 sfill 的手册上看到一些限制,你也可以看到额外的使用标志和命令:

$ man sfill

注意:secure-deletetion 工具包中的另外两个工具(sswapsdmem)与本指南的范围不直接相关,但是,为了将来的使用和传播知识的目的,我们会在下面介绍它们。

5、 sswap – 安全 swap 擦除器

它是一个安全的分区擦除器,sswap 以安全的方式删除 swap 分区上存在的数据。

警告:请记住在使用 sswap 之前卸载 swap 分区! 否则你的系统可能会崩溃!

要找到交换分区(并检查分页和交换设备/文件是否已经使用,请使用 swapon 命令),接下来,使用 swapoff 命令禁用分页和交换设备/文件(使 swap 分区不可用)。

然后在(关闭的) swap 分区上运行 sswap 命令:

$ cat /proc/swaps 
$ swapon
$ sudo swapoff /dev/sda6
$ sudo sswap /dev/sda6    #这个命令要花费一些时间,默认要进行 38 遍擦除

sswap - Secure Swap Wiper

sswap – 安全 swap 擦除器

阅读 sswap 的手册来获取更多的选项和信息:

$ man sswap

6、 sdmem – 安全内存擦除器

sdmem 是一个安全的内存擦除器,其设计目的是以安全的方式删除存储器(RAM)中的数据。

它最初命名为 smem,但是因为在 Debain 系统上存在另一个包 smem - 报告每个进程和每个用户的内存消耗,开发人员决定将它重命名为 sdmem

$ sudo sdmem -f -v

关于更多的使用信息,阅读 sdmen 的手册:

$ man sdmem 

推荐阅读: 在 Linux 系统下使用 PhotoRec & TestDisk 工具来恢复文件

就是这样了!在本文中,我们查看了一系列可以永久安全地删除 Linux 中的文件的工具。像往常一样,通过下面的评论栏发表你对本篇文章的想法或建议。


作者简介:

Aaron Kili 是一个 Linux 系统及 F.O.S.S 爱好者,即将成为一名系统管理员及 Web 开发人员,他现在是 TecMint 网站的内容创建者,他喜欢使用电脑来工作,并且他坚信分享知识是一种美德。


via: http://www.tecmint.com/permanently-and-securely-delete-files-directories-linux/

作者:Aaron Kili 译者:geekpi 校对:jasminepeng

本文由 LCTT 原创编译,Linux中国 荣誉推出

当你在系统中有意或无意地使用 shift + delete 组合键、删除选项,或是清空回收站的方式来删除一个文件时,该文件的内容并没有从硬盘(或是其它存储设备)上直接销毁。

它仅仅是从系统的目录结构中被移除,然后你在删除文件的目录下就看不到该文件了,但是这个文件仍然存在你磁盘中的某个位置上。

如果你有一个合适的工具和相关的专业知识,你就可以从电脑中恢复已丢失的文件。然而,随着你存储的文件越来越多,删除的文件将会被覆盖,你可能只能恢复最近删除的文件了。

在这篇文章中,我们将阐明如何在 Linux 系统中使用 TestDisk 来恢复硬盘上已删除或丢失的文件,它是非常优秀的修复工具,随一款免费的叫做 PhotoRec 的工具发布。

PhoteRec 工具用于从存储介质比如硬盘,数码相机和 cdrom 设备中恢复丢失的文件。(LCTT 译注:PhotoRec 的意思是 Photo Recovery,不是 Photo Recorder。)

在 Linux 系统中安装 TestDisk(PhotoRec)

在系统中执行以下相关的命令来安装 TestDisk

------- On Debian/Ubuntu/Linux Mint ------- 
$ sudo apt-get install testdisk
------- On CentOS/RHEL/Fedora ------- 
$ sudo yum install testdisk
------- On Fedora 22+ ------- 
$ sudo dnf install testdisk   
------- On Arch Linux ------- 
$ pacman -S testdisk             
------- On Gentoo ------- 
$ emerge testdisk  

如果你的 Linux 系统仓库中没有这个安装包,可以从 这里 下载然后在 Live CD 中运行即可。

这个安装包也可以在应急修复 CD 工具中找到,比如 Gparted LiveCD 、 Parted Magic 、 Ubuntu Boot CD 、 Ubuntu-Rescue-Remix 及其它工具等。

安装完成之后,使用 root 账号权限打开文本窗口,启动 PhotoRec,并指定已删除文件的分区:

$ sudo photorec /dev/sda3

你将会看到下面的交互界面:

PhotoRec Data Recovery Tool for Linux

Linux 系统 PhotoRec 数据恢复工具

使用左右箭头选择菜单选项,按回车键确认。要继续恢复操作,选择 [Proceed] 并单击 Enter。

你将看到下面的界面:

Select Partition to Proceed File Recovery

选择分区进行文件恢复

选择 [Options] 来查看可用的恢复选项,如下图所示:

Linux File Recovery Options

Linux 系统文件恢复选项

Q 返回,在下图界面,你可以指定你想要查询并恢复的文件扩展名。因此,选择 [File Opt],按回车键确认。

s 来选择或取消选择所有的文件扩展名,如果你已经取消选择了所有的文件扩展名,只需要使用向右箭头选择你想要恢复的文件类型即可(或者按向左箭头取消选择)。

例如,我想恢复所有系统中丢失的 .mov 类型的文件:

Specify Recovery File Type

指定恢复文件类型

b 键保存设置,之后你应该看到如下图所示信息。单击回车键返回(或者按 Q 键),再按 Q 键返回到主界面。

Save File Recovery Settings

保存文件恢复设置

现在选择 [Search] 开始文件恢复。在下图中,选择存储文件分区的文件系统类型,然后按回车键。

Select Filesystem to Recover Deleted Files

选择文件系统类型来恢复删除的文件

下一步,如下图所示,选择是仅对空闲空间还是整个分区进行分析。注意选择整个分区将会让操作过程变得更长更慢。选择合适的选项后,按回车键继续。

Choose Filesystem to Analyze

选择文件系统进行分析

选择一个目录用于存储将要恢复的文件,选择完成之后,按 C 键继续。选择不同分区的目录,以避免当更多的文件存储在这个分区时覆盖掉已删除的文件。

按向左箭头返回到根分区下。

Select Directory to Save Recovered Files

选择要保存恢复文件的目录

下图显示正在被恢复的指定类型的已删除文件。你可以按回车键来停止操作。

注意:在恢复的过程中,你的系统会变得很慢,很可能会卡住一段时间,请耐心等待直至恢复完成。

Recovering Deleted Files in Linux

在 Linux 系统中恢复已删除的文件

最后, Photorec 工具将会显示出已恢复文件的数量及保存的路径。

Linux File Recovery Summary

Linux 文件恢复情况汇总

默认情况下,已恢复的文件将会以 root 账号权限保存,因此,你需要以提升权限的方式打开文件管理器来访问这些文件。

使用如下命令(指定你的文件管理器):

$ gksudo nemo
或
$ gksudo nautilus 

想了解更多的信息,访问 PhotoRec 官网: http://www.cgsecurity.org/wiki/PhotoRec

到此为止吧!在这篇文章中,我们阐明了使用 PhotoRec 工具来恢复磁盘中已删除或丢失文件每一个步骤。这是目前为止我使用过的最可靠和有效的恢复工具,如果你知道还有其它相似的工具,请在评论中跟大家分享。


作者简介:

Aaron Kili 是一个 Linux 系统及 F.O.S.S 爱好者,即将成为一名系统管理员及 Web 开发人员,他现在是 TecMint 网站的内容创建者,他喜欢使用电脑来工作,并且他坚信分享知识是一种美德。


via: http://www.tecmint.com/photorec-recover-deleted-lost-files-in-linux/

作者:Aaron Kili 译者:rusking 校对:jasminepeng

本文由 LCTT 原创编译,Linux中国 荣誉推出