分类 技术 下的文章

对于大多数计算机用户而言,查找并替换重复的文件是一个常见的需求。查找并移除重复文件真是一项令人不胜其烦的工作,它耗时又耗力。但如果你的机器上跑着GNU/Linux,那么查找重复文件会变得十分简单,这多亏了fdupes工具。

Find and Delete Duplicate Files in Linux

fdupes——在Linux中查找并删除重复文件

fdupes是啥东东?

fdupes是Linux下的一个工具,它由Adrian Lopez用C编程语言编写并基于MIT许可证发行,该应用程序可以在指定的目录及子目录中查找重复的文件。fdupes通过对比文件的MD5签名,以及逐字节比较文件来识别重复内容,fdupes有各种选项,可以实现对文件的列出、删除、替换为文件副本的硬链接等操作。

文件对比以下列顺序开始:

大小对比 > 部分 MD5 签名对比 > 完整 MD5 签名对比 > 逐字节对比

安装 fdupes 到 Linux

在基于Debian的系统上,如UbuntuLinux Mint,安装最新版fdupes,用下面的命令手到擒来。

$ sudo apt-get install fdupes

在基于CentOS/RHEL和Fedora的系统上,你需要开启epel仓库来安装fdupes包。

# yum install fdupes
# dnf install fdupes    [在 Fedora 22 及其以后]

注意:自Fedora 22之后,默认的包管理器yum被dnf取代了。

fdupes命令如何使用

1、 作为演示的目的,让我们来在某个目录(比如 tecmint)下创建一些重复文件,命令如下:

$ mkdir /home/"$USER"/Desktop/tecmint && cd /home/"$USER"/Desktop/tecmint && for i in {1..15}; do echo "I Love Tecmint. Tecmint is a very nice community of Linux Users." > tecmint${i}.txt ; done

在执行以上命令后,让我们使用ls命令验证重复文件是否创建。

$ ls -l

total 60
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint10.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint11.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint12.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint13.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint14.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint15.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint1.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint2.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint3.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint4.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint5.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint6.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint7.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint8.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint9.txt

上面的脚本创建了15个文件,名称分别为tecmint1.txt,tecmint2.txt……tecmint15.txt,并且每个文件的数据相同,如

"I Love Tecmint. Tecmint is a very nice community of Linux Users."

2、 现在在tecmint文件夹内搜索重复的文件。

$ fdupes /home/$USER/Desktop/tecmint 

/home/tecmint/Desktop/tecmint/tecmint13.txt
/home/tecmint/Desktop/tecmint/tecmint8.txt
/home/tecmint/Desktop/tecmint/tecmint11.txt
/home/tecmint/Desktop/tecmint/tecmint3.txt
/home/tecmint/Desktop/tecmint/tecmint4.txt
/home/tecmint/Desktop/tecmint/tecmint6.txt
/home/tecmint/Desktop/tecmint/tecmint7.txt
/home/tecmint/Desktop/tecmint/tecmint9.txt
/home/tecmint/Desktop/tecmint/tecmint10.txt
/home/tecmint/Desktop/tecmint/tecmint2.txt
/home/tecmint/Desktop/tecmint/tecmint5.txt
/home/tecmint/Desktop/tecmint/tecmint14.txt
/home/tecmint/Desktop/tecmint/tecmint1.txt
/home/tecmint/Desktop/tecmint/tecmint15.txt
/home/tecmint/Desktop/tecmint/tecmint12.txt

3、 使用-r选项在每个目录包括其子目录中递归搜索重复文件。

它会递归搜索所有文件和文件夹,花一点时间来扫描重复文件,时间的长短取决于文件和文件夹的数量。在此其间,终端中会显示全部过程,像下面这样。

$ fdupes -r /home

Progress [37780/54747] 69%

4、 使用-S选项来查看某个文件夹内找到的重复文件的大小。

$ fdupes -S /home/$USER/Desktop/tecmint

65 bytes each:                          
/home/tecmint/Desktop/tecmint/tecmint13.txt
/home/tecmint/Desktop/tecmint/tecmint8.txt
/home/tecmint/Desktop/tecmint/tecmint11.txt
/home/tecmint/Desktop/tecmint/tecmint3.txt
/home/tecmint/Desktop/tecmint/tecmint4.txt
/home/tecmint/Desktop/tecmint/tecmint6.txt
/home/tecmint/Desktop/tecmint/tecmint7.txt
/home/tecmint/Desktop/tecmint/tecmint9.txt
/home/tecmint/Desktop/tecmint/tecmint10.txt
/home/tecmint/Desktop/tecmint/tecmint2.txt
/home/tecmint/Desktop/tecmint/tecmint5.txt
/home/tecmint/Desktop/tecmint/tecmint14.txt
/home/tecmint/Desktop/tecmint/tecmint1.txt
/home/tecmint/Desktop/tecmint/tecmint15.txt
/home/tecmint/Desktop/tecmint/tecmint12.txt

5、 你可以同时使用-S-r选项来查看所有涉及到的目录和子目录中的重复文件的大小,如下:

$ fdupes -Sr /home/avi/Desktop/

65 bytes each:                          
/home/tecmint/Desktop/tecmint/tecmint13.txt
/home/tecmint/Desktop/tecmint/tecmint8.txt
/home/tecmint/Desktop/tecmint/tecmint11.txt
/home/tecmint/Desktop/tecmint/tecmint3.txt
/home/tecmint/Desktop/tecmint/tecmint4.txt
/home/tecmint/Desktop/tecmint/tecmint6.txt
/home/tecmint/Desktop/tecmint/tecmint7.txt
/home/tecmint/Desktop/tecmint/tecmint9.txt
/home/tecmint/Desktop/tecmint/tecmint10.txt
/home/tecmint/Desktop/tecmint/tecmint2.txt
/home/tecmint/Desktop/tecmint/tecmint5.txt
/home/tecmint/Desktop/tecmint/tecmint14.txt
/home/tecmint/Desktop/tecmint/tecmint1.txt
/home/tecmint/Desktop/tecmint/tecmint15.txt
/home/tecmint/Desktop/tecmint/tecmint12.txt

107 bytes each:
/home/tecmint/Desktop/resume_files/r-csc.html
/home/tecmint/Desktop/resume_files/fc.html

6、 不同于在一个或所有文件夹内递归搜索,你可以选择按要求有选择性地在两个或三个文件夹内进行搜索。不必再提醒你了吧,如有需要,你可以使用-S和/或-r选项。

$ fdupes /home/avi/Desktop/ /home/avi/Templates/

7、 要删除重复文件,同时保留一个副本,你可以使用-d选项。使用该选项,你必须额外小心,否则最终结果可能会是文件/数据的丢失。郑重提醒,此操作不可恢复。

$ fdupes -d /home/$USER/Desktop/tecmint

[1] /home/tecmint/Desktop/tecmint/tecmint13.txt
[2] /home/tecmint/Desktop/tecmint/tecmint8.txt
[3] /home/tecmint/Desktop/tecmint/tecmint11.txt
[4] /home/tecmint/Desktop/tecmint/tecmint3.txt
[5] /home/tecmint/Desktop/tecmint/tecmint4.txt
[6] /home/tecmint/Desktop/tecmint/tecmint6.txt
[7] /home/tecmint/Desktop/tecmint/tecmint7.txt
[8] /home/tecmint/Desktop/tecmint/tecmint9.txt
[9] /home/tecmint/Desktop/tecmint/tecmint10.txt
[10] /home/tecmint/Desktop/tecmint/tecmint2.txt
[11] /home/tecmint/Desktop/tecmint/tecmint5.txt
[12] /home/tecmint/Desktop/tecmint/tecmint14.txt
[13] /home/tecmint/Desktop/tecmint/tecmint1.txt
[14] /home/tecmint/Desktop/tecmint/tecmint15.txt
[15] /home/tecmint/Desktop/tecmint/tecmint12.txt

Set 1 of 1, preserve files [1 - 15, all]: 

你可能注意到了,所有重复的文件被列了出来,并给出删除提示,一个一个来,或者指定范围,或者一次性全部删除。你可以选择一个范围,就像下面这样,来删除指定范围内的文件。

Set 1 of 1, preserve files [1 - 15, all]: 2-15

   [-] /home/tecmint/Desktop/tecmint/tecmint13.txt
   [+] /home/tecmint/Desktop/tecmint/tecmint8.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint11.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint3.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint4.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint6.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint7.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint9.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint10.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint2.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint5.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint14.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint1.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint15.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint12.txt

8、 从安全角度出发,你可能想要打印fdupes的输出结果到文件中,然后检查文本文件来决定要删除什么文件。这可以降低意外删除文件的风险。你可以这么做:

$ fdupes -Sr /home > /home/fdupes.txt

注意:你应该替换/home为你想要的文件夹。同时,如果你想要递归搜索并打印大小,可以使用-r-S选项。

9、 你可以使用-f选项来忽略每个匹配集中的首个文件。

首先列出该目录中的文件。

$ ls -l /home/$USER/Desktop/tecmint

total 20
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint9 (3rd copy).txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint9 (4th copy).txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint9 (another copy).txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint9 (copy).txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint9.txt

然后,忽略掉每个匹配集中的首个文件。

$ fdupes -f /home/$USER/Desktop/tecmint

/home/tecmint/Desktop/tecmint9 (copy).txt
/home/tecmint/Desktop/tecmint9 (3rd copy).txt
/home/tecmint/Desktop/tecmint9 (another copy).txt
/home/tecmint/Desktop/tecmint9 (4th copy).txt

10、 检查已安装的fdupes版本。

$ fdupes --version

fdupes 1.51

11、 如果你需要关于fdupes的帮助,可以使用-h开关。

$ fdupes -h

Usage: fdupes [options] DIRECTORY...

 -r --recurse       for every directory given follow subdirectories
                    encountered within
 -R --recurse:      for each directory given after this option follow
                    subdirectories encountered within (note the ':' at
                    the end of the option, manpage for more details)
 -s --symlinks      follow symlinks
 -H --hardlinks     normally, when two or more files point to the same
                    disk area they are treated as non-duplicates; this
                    option will change this behavior
 -n --noempty       exclude zero-length files from consideration
 -A --nohidden      exclude hidden files from consideration
 -f --omitfirst     omit the first file in each set of matches
 -1 --sameline      list each set of matches on a single line
 -S --size          show size of duplicate files
 -m --summarize     summarize dupe information
 -q --quiet         hide progress indicator
 -d --delete        prompt user for files to preserve and delete all
                    others; important: under particular circumstances,
                    data may be lost when using this option together
                    with -s or --symlinks, or when specifying a
                    particular directory more than once; refer to the
                    fdupes documentation for additional information
 -N --noprompt      together with --delete, preserve the first file in
                    each set of duplicates and delete the rest without
                    prompting the user
 -v --version       display fdupes version
 -h --help          display this help message

到此为止了。让我知道你以前怎么在Linux中查找并删除重复文件的吧?同时,也让我知道你关于这个工具的看法。在下面的评论部分中提供你有价值的反馈吧,别忘了为我们点赞并分享,帮助我们扩散哦。

我正在使用另外一个移除重复文件的工具,它叫fslint。很快就会把使用心得分享给大家哦,你们一定会喜欢看的。


via: http://www.tecmint.com/fdupes-find-and-delete-duplicate-files-in-linux/

作者:GOLinux 校对:wxy

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

RAID 10 是组合 RAID 1 和 RAID 0 形成的。要设置 RAID 10,我们至少需要4个磁盘。在之前的文章中,我们已经看到了如何使用最少两个磁盘设置 RAID 1 和 RAID 0。

在这里,我们将使用最少4个磁盘组合 RAID 1 和 RAID 0 来设置 RAID 10。假设我们已经在用 RAID 10 创建的逻辑卷保存了一些数据。比如我们要保存数据 “TECMINT”,它将使用以下方法将其保存在4个磁盘中。

在 Linux 中创建 Raid 10(LCTT 译注:原图有误,已修正)

RAID 10 是先做镜像,再做条带。因此,在 RAID 1 中,相同的数据将被写入到两个磁盘中,“T”将同时被写入到第一和第二个磁盘中。接着的数据被条带化到另外两个磁盘,“E”将被同时写入到第三和第四个磁盘中。它将继续循环此过程,“C”将同时被写入到第一和第二个磁盘,以此类推。

(LCTT 译注:原文中此处描述混淆有误,已经根据实际情况进行修改。)

现在你已经了解 RAID 10 怎样组合 RAID 1 和 RAID 0 来工作的了。如果我们有4个20 GB 的磁盘,总共为 80 GB,但我们将只能得到40 GB 的容量,另一半的容量在构建 RAID 10 中丢失。

RAID 10 的优点和缺点

  • 提供更好的性能。
  • 在 RAID 10 中我们将失去一半的磁盘容量。
  • 读与写的性能都很好,因为它会同时进行写入和读取。
  • 它能解决数据库的高 I/O 磁盘写操作。

要求

在 RAID 10 中,我们至少需要4个磁盘,前2个磁盘为 RAID 1,其他2个磁盘为 RAID 0,就像我之前说的,RAID 10 仅仅是组合了 RAID 0和1。如果我们需要扩展 RAID 组,最少需要添加4个磁盘。

我的服务器设置

操作系统 :  CentOS 6.5 Final
IP 地址       :   192.168.0.229
主机名       :   rd10.tecmintlocal.com
磁盘 1 [20GB]     :   /dev/sdd
磁盘 2 [20GB]     :   /dev/sdc
磁盘 3 [20GB]     :   /dev/sdd
磁盘 4 [20GB]     :   /dev/sde

有两种方法来设置 RAID 10,在这里两种方法我都会演示,但我更喜欢第一种方法,使用它来设置 RAID 10 更简单。

方法1:设置 RAID 10

1、 首先,使用以下命令确认所添加的4块磁盘没有被使用。

# ls -l /dev | grep sd

2、 四个磁盘被检测后,然后来检查磁盘是否存在 RAID 分区。

# mdadm -E /dev/sd[b-e]
# mdadm --examine /dev/sdb /dev/sdc /dev/sdd /dev/sde # 或

Verify 4 Added Disks

验证添加的4块磁盘

注意: 在上面的输出中,如果没有检测到 super-block 意味着在4块磁盘中没有定义过 RAID。

第1步:为 RAID 分区

3、 现在,使用fdisk,命令为4个磁盘(/dev/sdb, /dev/sdc, /dev/sdd 和 /dev/sde)创建新分区。

# fdisk /dev/sdb
# fdisk /dev/sdc
# fdisk /dev/sdd
# fdisk /dev/sde
为 /dev/sdb 创建分区

我来告诉你如何使用 fdisk 为磁盘(/dev/sdb)进行分区,此步也适用于其他磁盘。

# fdisk /dev/sdb

请使用以下步骤为 /dev/sdb 创建一个新的分区。

  • n 创建新的分区。
  • 然后按 P 选择主分区。
  • 接下来选择分区号为1。
  • 只需按两次回车键选择默认值即可。
  • 然后,按 P 来打印创建好的分区。
  • L,列出所有可用的类型。
  • t 去修改分区。
  • 键入 fd 设置为 Linux 的 RAID 类型,然后按 Enter 确认。
  • 然后再次使用p查看我们所做的更改。
  • 使用w保存更改。

Disk sdb Partition

为磁盘 sdb 分区

注意: 请使用上面相同的指令对其他磁盘(sdc, sdd sdd sde)进行分区。

4、 创建好4个分区后,需要使用下面的命令来检查磁盘是否存在 raid。

# mdadm -E /dev/sd[b-e]
# mdadm --examine /dev/sdb /dev/sdc /dev/sdd /dev/sde # 或

# mdadm -E /dev/sd[b-e]1
# mdadm --examine /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 # 或

Check All Disks for Raid

检查磁盘

注意: 以上输出显示,新创建的四个分区中没有检测到 super-block,这意味着我们可以继续在这些磁盘上创建 RAID 10。

第2步: 创建 RAID 设备 md

5、 现在该创建一个md(即 /dev/md0)设备了,使用“mdadm” raid 管理工具。在创建设备之前,必须确保系统已经安装了mdadm工具,如果没有请使用下面的命令来安装。

# yum install mdadm     [在 RedHat 系统]
# apt-get install mdadm     [在 Debain 系统]

mdadm工具安装完成后,可以使用下面的命令创建一个md raid 设备。

# mdadm --create /dev/md0 --level=10 --raid-devices=4 /dev/sd[b-e]1

6、 接下来使用cat命令验证新创建的 raid 设备。

# cat /proc/mdstat

Create md raid Device

创建 md RAID 设备

7、 接下来,使用下面的命令来检查4个磁盘。下面命令的输出会很长,因为它会显示4个磁盘的所有信息。

# mdadm --examine /dev/sd[b-e]1

8、 接下来,使用以下命令来查看 RAID 阵列的详细信息。

# mdadm --detail /dev/md0

Check Raid Array Details

查看 RAID 阵列详细信息

注意: 你在上面看到的结果,该 RAID 的状态是 active 和re-syncing。

第3步:创建文件系统

9、 使用 ext4 作为md0′的文件系统,并将它挂载到/mnt/raid10`下。在这里,我用的是 ext4,你可以使用你想要的文件系统类型。

# mkfs.ext4 /dev/md0

Create md Filesystem

创建 md 文件系统

10、 在创建文件系统后,挂载文件系统到/mnt/raid10下,并使用ls -l命令列出挂载点下的内容。

# mkdir /mnt/raid10
# mount /dev/md0 /mnt/raid10/
# ls -l /mnt/raid10/

接下来,在挂载点下创建一些文件,并在文件中添加些内容,然后检查内容。

# touch /mnt/raid10/raid10_files.txt
# ls -l /mnt/raid10/
# echo "raid 10 setup with 4 disks" > /mnt/raid10/raid10_files.txt
# cat /mnt/raid10/raid10_files.txt

Mount md Device

挂载 md 设备

11、 要想自动挂载,打开/etc/fstab文件并添加下面的条目,挂载点根据你环境的不同来添加。使用 wq! 保存并退出。

# vim /etc/fstab

/dev/md0                /mnt/raid10              ext4    defaults        0 0

AutoMount md Device

挂载 md 设备

12、 接下来,在重新启动系统前使用mount -a来确认/etc/fstab文件是否有错误。

# mount -av

Check Errors in Fstab

检查 Fstab 中的错误

第四步:保存 RAID 配置

13、 默认情况下 RAID 没有配置文件,所以我们需要在上述步骤完成后手动保存它。

# mdadm --detail --scan --verbose >> /etc/mdadm.conf

Save Raid10 Configuration

保存 RAID10 的配置

就这样,我们使用方法1创建完了 RAID 10,这种方法是比较容易的。现在,让我们使用方法2来设置 RAID 10。

方法2:创建 RAID 10

1、 在方法2中,我们必须定义2组 RAID 1,然后我们需要使用这些创建好的 RAID 1 的集合来定义一个 RAID 0。在这里,我们将要做的是先创建2个镜像(RAID1),然后创建 RAID0 (条带化)。

首先,列出所有的可用于创建 RAID 10 的磁盘。

# ls -l /dev | grep sd

List 4 Devices

列出了 4 个设备

2、 将4个磁盘使用fdisk命令进行分区。对于如何分区,您可以按照上面的第1步。

# fdisk /dev/sdb
# fdisk /dev/sdc
# fdisk /dev/sdd
# fdisk /dev/sde

3、 在完成4个磁盘的分区后,现在检查磁盘是否存在 RAID块。

# mdadm --examine /dev/sd[b-e]
# mdadm --examine /dev/sd[b-e]1

Examine 4 Disks

检查 4 个磁盘

第1步:创建 RAID 1

4、 首先,使用4块磁盘创建2组 RAID 1,一组为sdb1′和sdc1′,另一组是sdd1′ 和sde1′。

# mdadm --create /dev/md1 --metadata=1.2 --level=1 --raid-devices=2 /dev/sd[b-c]1
# mdadm --create /dev/md2 --metadata=1.2 --level=1 --raid-devices=2 /dev/sd[d-e]1
# cat /proc/mdstat

Creating Raid 1

创建 RAID 1

Check Details of Raid 1

查看 RAID 1 的详细信息

第2步:创建 RAID 0

5、 接下来,使用 md1 和 md2 来创建 RAID 0。

# mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/md1 /dev/md2
# cat /proc/mdstat

Creating Raid 0

创建 RAID 0

第3步:保存 RAID 配置

6、 我们需要将配置文件保存在/etc/mdadm.conf文件中,使其每次重新启动后都能加载所有的 RAID 设备。

# mdadm --detail --scan --verbose >> /etc/mdadm.conf

在此之后,我们需要按照方法1中的第3步来创建文件系统。

就是这样!我们采用的方法2创建完了 RAID 1+0。我们将会失去一半的磁盘空间,但相比其他 RAID ,它的性能将是非常好的。

结论

在这里,我们采用两种方法创建 RAID 10。RAID 10 具有良好的性能和冗余性。希望这篇文章可以帮助你了解 RAID 10 嵌套 RAID。在后面的文章中我们会看到如何扩展现有的 RAID 阵列以及更多精彩的内容。


via: http://www.tecmint.com/create-raid-10-in-linux/

作者:Babin Lonston 译者:strugglingyouth 校对:wxy

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

Ubuntu的安装器提供了一个轻松“使用LVM”的复选框。它的描述中说,启用逻辑卷管理可以让你制作快照,并更容易地调整硬盘分区大小——这里将为大家讲述如何完成这些操作。

LVM是一种技术,某种程度上和RAID阵列Windows上的“存储空间”类似。虽然该技术在服务器上更为有用,但是它也可以在桌面端PC上使用。

你应该在新安装Ubuntu时使用LVM吗?

第一个问题是,你是否想要在安装Ubuntu时使用LVM?如果是,那么Ubuntu让这一切变得很简单,只需要轻点鼠标就可以完成,但是该选项默认是不启用的。正如安装器所说的,它允许你调整分区、创建快照、将多个磁盘合并到一个逻辑卷等等——所有这一切都可以在系统运行时完成。不同于传统分区,你不需要关掉你的系统,从Live CD或USB驱动,然后当这些分区不使用时才能调整

完全坦率地说,普通Ubuntu桌面用户可能不会意识到他们是否正在使用LVM。但是,如果你想要在今后做一些更高深的事情,那么LVM就会有所帮助了。LVM可能更复杂,可能会在你今后恢复数据时会导致问题——尤其是在你经验不足时。这里不会有显著的性能损失——LVM是彻底地在Linux内核中实现的。

逻辑卷管理说明

前面,我们已经说明了何谓LVM。概括来讲,它在你的物理磁盘和呈现在你系统中的分区之间提供了一个抽象层。例如,你的计算机可能装有两个硬盘驱动器,它们的大小都是 1 TB。你必须得在这些磁盘上至少分两个区,每个区大小 1 TB。

LVM就在这些分区上提供了一个抽象层。用于取代磁盘上的传统分区,LVM将在你对这些磁盘初始化后,将它们当作独立的“物理卷”来对待。然后,你就可以基于这些物理卷创建“逻辑卷”。例如,你可以将这两个 1 TB 的磁盘组合成一个 2 TB 的分区,你的系统将只看到一个 2 TB 的卷,而LVM将会在后台处理这一切。一组物理卷以及一组逻辑卷被称之为“卷组”,一个典型的系统只会有一个卷组。

该抽象层使得调整分区、将多个磁盘组合成单个卷、甚至为一个运行着的分区的文件系统创建“快照”变得十分简单,而完成所有这一切都无需先卸载分区。

注意,如果你没有创建备份,那么将多个磁盘合并成一个卷将会是个糟糕的想法。它就像RAID 0——如果你将两个 1 TB 的卷组合成一个 2 TB 的卷,只要其中一个硬盘失败,你将丢失该卷上的重要数据。所以,如果你要走这条路,那么备份就及其重要。

管理LVM卷的图形化工具

通常,LVM通过Linux终端命令来管理。这在Ubuntu上也行得通,但是有个更简单的图形化方法可供大家采用。如果你是一个Linux用户,对GParted或者与其类似的分区管理器熟悉,算了,别瞎掰了——GParted根本不支持LVM磁盘。

然而,你可以使用Ubuntu附带的磁盘工具。该工具也被称之为GNOME磁盘工具,或者叫Palimpsest。点击dash中的图标来开启它吧,搜索“磁盘”然后敲击回车。不像GParted,该磁盘工具将会在“其它设备”下显示LVM分区,因此你可以根据需要格式化这些分区,也可以调整其它选项。该工具在Live CD或USB 驱动下也可以使用。

不幸的是,该磁盘工具不支持LVM的大多数强大的特性,没有管理卷组、扩展分区,或者创建快照等选项。对于这些操作,你可以通过终端来实现,但是没有那个必要。相反,你可以打开Ubuntu软件中心,搜索关键字LVM,然后安装逻辑卷管理工具,你可以在终端窗口中运行sudo apt-get install system-config-lvm命令来安装它。安装完之后,你就可以从dash上打开逻辑卷管理工具了。

这个图形化配置工具是由红帽公司开发的,虽然有点陈旧了,但却是唯一的图形化方式,你可以通过它来完成上述操作,将那些终端命令抛诸脑后了。

比如说,你想要添加一个新的物理卷到卷组中。你可以打开该工具,选择未初始化条目下的新磁盘,然后点击“初始化条目”按钮。然后,你就可以在未分配卷下找到新的物理卷了,你可以使用“添加到现存卷组”按钮来将它添加到“ubuntu-vg”卷组,这是Ubuntu在安装过程中创建的卷组。

卷组视图会列出你所有的物理卷和逻辑卷的总览。这里,我们有两个横跨两个独立硬盘驱动器的物理分区,我们有一个交换分区和一个根分区,这是Ubuntu默认设置的分区图表。由于我们从另一个驱动器添加了第二个物理分区,现在那里有大量未使用空间。

要扩展逻辑分区到物理空间,你可以在逻辑视图下选择它,点击编辑属性,然后修改大小来扩大分区。你也可以在这里缩小分区。

system-config-lvm的其它选项允许你设置快照和镜像。对于传统桌面而言,你或许不需要这些特性,但是在这里也可以通过图形化处理。记住,你也可以使用终端命令完成这一切


via: http://www.howtogeek.com/211937/how-to-use-lvm-on-ubuntu-for-easy-partition-resizing-and-snapshots/

译者:GOLinux 校对:wxy

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

RAID 6 是 RAID 5 的升级版,它有两个分布式奇偶校验,即使两个磁盘发生故障后依然有容错能力。在两个磁盘同时发生故障时,系统的关键任务仍然能运行。它与 RAID 5 相似,但性能更健壮,因为它多用了一个磁盘来进行奇偶校验。

在之前的文章中,我们已经在 RAID 5 看了分布式奇偶校验,但在本文中,我们将看到的是 RAID 6 双分布式奇偶校验。不要期望比其他 RAID 有更好的性能,除非你也安装了一个专用的 RAID 控制器。在 RAID 6 中,即使我们失去了2个磁盘,我们仍可以通过更换磁盘,从校验中构建数据,然后取回数据。

Setup RAID 6 in CentOS

在 Linux 中安装 RAID 6

要建立一个 RAID 6,一组最少需要4个磁盘。RAID 6 甚至在有些组中会有更多磁盘,这样将多个硬盘捆在一起,当读取数据时,它会同时从所有磁盘读取,所以读取速度会更快,当写数据时,因为它要将数据写在条带化的多个磁盘上,所以性能会较差。

现在,很多人都在讨论为什么我们需要使用 RAID 6,它的性能和其他 RAID 相比并不太好。提出这个问题首先需要知道的是,如果需要高容错性就选择 RAID 6。在每一个用于数据库的高可用性要求较高的环境中,他们需要 RAID 6 因为数据库是最重要,无论花费多少都需要保护其安全,它在视频流环境中也是非常有用的。

RAID 6 的的优点和缺点

  • 性能不错。
  • RAID 6 比较昂贵,因为它要求两个独立的磁盘用于奇偶校验功能。
  • 将失去两个磁盘的容量来保存奇偶校验信息(双奇偶校验)。
  • 即使两个磁盘损坏,数据也不会丢失。我们可以在更换损坏的磁盘后从校验中重建数据。
  • 读性能比 RAID 5 更好,因为它从多个磁盘读取,但对于没有专用的 RAID 控制器的设备写性能将非常差。

要求

要创建一个 RAID 6 最少需要4个磁盘。你也可以添加更多的磁盘,但你必须有专用的 RAID 控制器。使用软件 RAID 我们在 RAID 6 中不会得到更好的性能,所以我们需要一个物理 RAID 控制器。

如果你新接触 RAID 设置,我们建议先看完以下 RAID 文章。

我的服务器设置

操作系统 :  CentOS 6.5 Final
IP 地址    :  192.168.0.228
主机名    :  rd6.tecmintlocal.com
磁盘 1 [20GB]  :  /dev/sdb
磁盘 2 [20GB]  :  /dev/sdc
磁盘 3 [20GB]  :  /dev/sdd
磁盘 4 [20GB]  :  /dev/sde

这是9篇系列教程的第5部分,在这里我们将看到如何在 Linux 系统或者服务器上使用四个 20GB 的磁盘(名为 /dev/sdb、 /dev/sdc、 /dev/sdd 和 /dev/sde)创建和设置软件 RAID 6 (条带化双分布式奇偶校验)。

第1步:安装 mdadm 工具,并检查磁盘

1、 如果你按照我们最进的两篇 RAID 文章(第2篇和第3篇),我们已经展示了如何安装mdadm工具。如果你直接看的这篇文章,我们先来解释下在 Linux 系统中如何使用mdadm工具来创建和管理 RAID,首先根据你的 Linux 发行版使用以下命令来安装。

# yum install mdadm     [在 RedHat 系统]
# apt-get install mdadm     [在 Debain 系统]

2、 安装该工具后,然后来验证所需的四个磁盘,我们将会使用下面的fdisk命令来检查用于创建 RAID 的磁盘。

# fdisk -l | grep sd

Check Hard Disk in Linux

在 Linux 中检查磁盘

3、 在创建 RAID 磁盘前,先检查下我们的磁盘是否创建过 RAID 分区。

# mdadm -E /dev/sd[b-e]
# mdadm --examine /dev/sdb /dev/sdc /dev/sdd /dev/sde # 或

Check Raid on Disk

在磁盘上检查 RAID 分区

注意: 在上面的图片中,没有检测到任何 super-block 或者说在四个磁盘上没有 RAID 存在。现在我们开始创建 RAID 6。

第2步:为 RAID 6 创建磁盘分区

4、 现在在 /dev/sdb, /dev/sdc, /dev/sdd/dev/sde上为 RAID 创建分区,使用下面的 fdisk 命令。在这里,我们将展示如何在 sdb 磁盘创建分区,同样的步骤也适用于其他分区。

创建 /dev/sdb 分区

# fdisk /dev/sdb

请按照说明进行操作,如下图所示创建分区。

  • n创建新的分区。
  • 然后按 P 选择主分区。
  • 接下来选择分区号为1。
  • 只需按两次回车键选择默认值即可。
  • 然后,按 P 来打印创建好的分区。
  • L,列出所有可用的类型。
  • t 去修改分区。
  • 键入 fd 设置为 Linux 的 RAID 类型,然后按回车确认。
  • 然后再次使用p查看我们所做的更改。
  • 使用w保存更改。

Create sdb Partition

创建 /dev/sdb 分区

创建 /dev/sdc 分区

# fdisk /dev/sdc

Create sdc Partition

创建 /dev/sdc 分区

创建 /dev/sdd 分区

# fdisk /dev/sdd

Create sdd Partition

创建 /dev/sdd 分区

创建 /dev/sde 分区

# fdisk /dev/sde

Create sde Partition

创建 /dev/sde 分区

5、 创建好分区后,检查磁盘的 super-blocks 是个好的习惯。如果 super-blocks 不存在我们可以按前面的创建一个新的 RAID。

# mdadm -E /dev/sd[b-e]1    
# mdadm --examine /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 # 或

Check Raid on New Partitions

*在新分区中检查 RAID *

第3步:创建 md 设备(RAID)

6、 现在可以使用以下命令创建 RAID 设备md0 (即 /dev/md0),并在所有新创建的分区中应用 RAID 级别,然后确认 RAID 设置。

# mdadm --create /dev/md0 --level=6 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
# cat /proc/mdstat

Create Raid 6 Device

创建 Raid 6 设备

7、 你还可以使用 watch 命令来查看当前创建 RAID 的进程,如下图所示。

# watch -n1 cat /proc/mdstat

Check Raid 6 Process

检查 RAID 6 创建过程

8、 使用以下命令验证 RAID 设备。

# mdadm -E /dev/sd[b-e]1

注意::上述命令将显示四个磁盘的信息,这是相当长的,所以没有截取其完整的输出。

9、 接下来,验证 RAID 阵列,以确认重新同步过程已经开始。

# mdadm --detail /dev/md0

Check Raid 6 Array

检查 Raid 6 阵列

第4步:在 RAID 设备上创建文件系统

10、 使用 ext4 为/dev/md0创建一个文件系统,并将它挂载在 /mnt/raid6 。这里我们使用的是 ext4,但你可以根据你的选择使用任意类型的文件系统。

# mkfs.ext4 /dev/md0

Create File System on Raid

在 RAID 6 上创建文件系统

11、 将创建的文件系统挂载到 /mnt/raid6,并验证挂载点下的文件,我们可以看到 lost+found 目录。

# mkdir /mnt/raid6
# mount /dev/md0 /mnt/raid6/
# ls -l /mnt/raid6/

12、 在挂载点下创建一些文件,在任意文件中添加一些文字并验证其内容。

# touch /mnt/raid6/raid6_test.txt
# ls -l /mnt/raid6/
# echo "tecmint raid setups" > /mnt/raid6/raid6_test.txt
# cat /mnt/raid6/raid6_test.txt

Verify Raid Content

验证 RAID 内容

13、 在 /etc/fstab 中添加以下条目使系统启动时自动挂载设备,操作系统环境不同挂载点可能会有所不同。

# vim /etc/fstab

/dev/md0                /mnt/raid6              ext4    defaults        0 0

Automount Raid 6 Device

自动挂载 RAID 6 设备

14、 接下来,执行mount -a命令来验证 fstab 中的条目是否有错误。

# mount -av

Verify Raid Automount

验证 RAID 是否自动挂载

第5步:保存 RAID 6 的配置

15、 请注意,默认情况下 RAID 没有配置文件。我们需要使用以下命令手动保存它,然后检查设备/dev/md0的状态。

# mdadm --detail --scan --verbose >> /etc/mdadm.conf
# cat /etc/mdadm.conf
# mdadm --detail /dev/md0

Save Raid 6 Configuration

保存 RAID 6 配置

Check Raid 6 Status

检查 RAID 6 状态

第6步:添加备用磁盘

16、 现在,已经使用了4个磁盘,并且其中两个作为奇偶校验信息来使用。在某些情况下,如果任意一个磁盘出现故障,我们仍可以得到数据,因为在 RAID 6 使用双奇偶校验。

如果第二个磁盘也出现故障,在第三块磁盘损坏前我们可以添加一个​​新的。可以在创建 RAID 集时加入一个备用磁盘,但我在创建 RAID 集合前没有定义备用的磁盘。不过,我们可以在磁盘损坏后或者创建 RAID 集合时添加一块备用磁盘。现在,我们已经创建好了 RAID,下面让我演示如何添加备用磁盘。

为了达到演示的目的,我已经热插入了一个新的 HDD 磁盘(即 /dev/sdf),让我们来验证接入的磁盘。

# ls -l /dev/ | grep sd

Check New Disk

检查新磁盘

17、 现在再次确认新连接的磁盘没有配置过 RAID ,使用 mdadm 来检查。

# mdadm --examine /dev/sdf

Check Raid on New Disk

在新磁盘中检查 RAID

注意: 像往常一样,我们早前已经为四个磁盘创建了分区,同样,我们使用 fdisk 命令为新插入的磁盘创建新分区。

# fdisk /dev/sdf

Create sdf Partition

为 /dev/sdf 创建分区

18、 在 /dev/sdf 创建新的分区后,在新分区上确认没有 RAID,然后将备用磁盘添加到 RAID 设备 /dev/md0 中,并验证添加的设备。

# mdadm --examine /dev/sdf
# mdadm --examine /dev/sdf1
# mdadm --add /dev/md0 /dev/sdf1
# mdadm --detail /dev/md0

Verify Raid on sdf Partition

在 sdf 分区上验证 Raid

Add sdf Partition to Raid

*添加 sdf 分区到 RAID *

Verify sdf Partition Details

验证 sdf 分区信息

第7步:检查 RAID 6 容错

19、 现在,让我们检查备用驱动器是否能自动工作,当我们阵列中的任何一个磁盘出现故障时。为了测试,我将一个磁盘手工标记为故障设备。

在这里,我们标记 /dev/sdd1 为故障磁盘。

# mdadm --manage --fail /dev/md0 /dev/sdd1

Check Raid 6 Fault Tolerance

检查 RAID 6 容错

20、 让我们查看 RAID 的详细信息,并检查备用磁盘是否开始同步。

# mdadm --detail /dev/md0

Check Auto Raid Syncing

检查 RAID 自动同步

哇塞! 这里,我们看到备用磁盘激活了,并开始重建进程。在底部,我们可以看到有故障的磁盘 /dev/sdd1 标记为 faulty。可以使用下面的命令查看进程重建。

# cat /proc/mdstat

Raid 6 Auto Syncing

RAID 6 自动同步

结论:

在这里,我们看到了如何使用四个磁盘设置 RAID 6。这种 RAID 级别是具有高冗余的昂贵设置之一。在接下来的文章中,我们将看到如何建立一个嵌套的 RAID 10 甚至更多。请继续关注。


via: http://www.tecmint.com/create-raid-6-in-linux/

作者:Babin Lonston 译者:strugglingyouth 校对:wxy

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

正如我确信,你们一定知道Linux下的多种软件安装方式:使用发行版所提供的包管理系统(aptitude,yum,或者zypper,还可以举很多例子),从源码编译(尽管现在很少用了,但在Linux发展早期却是唯一可用的方法),或者使用各自的低级工具dpkg用于.deb,以及rpm用于.rpm,预编译包,如此这般。

Convert RPM to DEB and DEB to RPM

使用Alien将RPM转换成DEB以及将DEB转换成RPM

在本文中,我们将为你介绍alien,一个用于在各种不同的Linux包格式相互转换的工具,其最常见的用法是将.rpm转换成.deb(或者反过来)。

如果你需要某个特定类型的包,而你只能找到其它格式的包的时候,该工具迟早能派得上用场——即使是其作者不再维护,并且在其网站声明:alien将可能永远维持在实验状态。

例如,有一次,我正查找一个用于喷墨打印机的.deb驱动,但是却没有找到——生产厂家只提供.rpm包,这时候alien拯救了我。我安装了alien,将包进行转换,不久之后我就可以使用我的打印机了,没有任何问题。

即便如此,我们也必须澄清一下,这个工具不应当用来转换重要的系统文件和库,因为它们在不同的发行版中有不同的配置。只有在前面说的那种情况下所建议的安装方法根本不适合时,alien才能作为最后手段使用。

最后一项要点是,我们必须注意,虽然我们在本文中使用CentOS和Debian,除了前两个发行版及其各自的家族体系外,据我们所知,alien可以工作在Slackware中,甚至Solaris中。

步骤1:安装Alien及其依赖包

要安装alien到CentOS/RHEL 7中,你需要启用EPEL和Nux Dextop(是的,是Dextop——不是Desktop)仓库,顺序如下:

# yum install epel-release

启用Nux Dextop仓库的包的当前最新版本是0.5(2015年8月10日发布),在安装之前你可以查看http://li.nux.ro/download/nux/dextop/el7/x86_64/上是否有更新的版本。

# rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
# rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm

然后再做,

# yum update && yum install alien

在Fedora中,你只需要运行上面的命令即可。

在Debian及其衍生版中,只需要:

# aptitude install alien

步骤2:将.deb转换成.rpm包

对于本次测试,我们选择了date工具,它提供了一系列日期和时间工具用于处理大量金融数据。我们将下载.deb包到我们的CentOS 7机器中,将它转换成.rpm并安装:

Check CentOS Version

检查CentOS版本

# cat /etc/centos-release
# wget http://ftp.us.debian.org/debian/pool/main/d/dateutils/dateutils_0.3.1-1.1_amd64.deb
# alien --to-rpm --scripts dateutils_0.3.1-1.1_amd64.deb

Convert .deb to .rpm package in Linux

在Linux中将.deb转换成.rpm

重要:(请注意alien是怎样来增加目标包的次版本号的。如果你想要无视该行为,请添加-keep-version标识)。

如果我们尝试马上安装该包,我们将碰到些许问题:

# rpm -Uvh dateutils-0.3.1-2.1.x86_64.rpm 

Install RPM Package

安装RPM包

要解决该问题,我们需要启用epel-testing仓库,然后安装rpmbuild工具来编辑该包的配置以重建包:

# yum --enablerepo=epel-testing install rpmrebuild

然后运行,

# rpmrebuild -pe dateutils-0.3.1-2.1.x86_64.rpm

它会打开你的默认文本编辑器。请转到%files章节并删除涉及到错误信息中提到的目录的行,然后保存文件并退出:

Convert .deb to Alien Version

转换.deb到Alien版

但你退出该文件后,将提示你继续去重构。如果你选择“Y”,该文件会重构到指定的目录(与当前工作目录不同):

# rpmrebuild –pe dateutils-0.3.1-2.1.x86_64.rpm

Build RPM Package

构建RPM包

现在你可以像以往一样继续来安装包并验证:

# rpm -Uvh /root/rpmbuild/RPMS/x86_64/dateutils-0.3.1-2.1.x86_64.rpm
# rpm -qa | grep dateutils

Install Build RPM Package

安装构建RPM包

最后,你可以列出date工具包含的各个工具,也可以查看各自的手册页:

# ls -l /usr/bin | grep dateutils

Verify Installed RPM Package

验证安装的RPM包

步骤3:将.rpm转换成.deb包

在本节中,我们将演示如何将.rpm转换成.deb。在一台32位的Debian Wheezy机器中,让我们从CentOS 6操作系统仓库中下载用于zsh shell的.rpm包。注意,该shell在Debian及其衍生版的默认安装中是不可用的。

# cat /etc/shells
# lsb_release -a | tail -n 4

Check Shell and Debian OS Version

检查Shell和Debian操作系统版本

# wget http://mirror.centos.org/centos/6/os/i386/Packages/zsh-4.3.11-4.el6.centos.i686.rpm
# alien --to-deb --scripts zsh-4.3.11-4.el6.centos.i686.rpm

你可以安全地无视关于签名丢失的信息:

Convert .rpm to .deb Package

将.rpm转换成.deb包

过了一会儿后,.deb包应该已经生成,并可以安装了:

# dpkg -i zsh_4.3.11-5_i386.deb

Install RPM Converted Deb Package

安装RPM转换来的Deb包

安装完后,你看看可以zsh是否添加到了合法shell列表中:

# cat /etc/shells

Confirm Installed Zsh Package

确认安装的Zsh包

小结

在本文中,我们已经解释了如何将.rpm转换成.deb及其反向转换,这可以作为这类程序不能从仓库中或者作为可分发源代码获得的最后安装手段。你一定想要将本文添加到书签中,因为我们都需要alien。

请自由分享你关于本文的想法,写到下面的表单中吧。


via: http://www.tecmint.com/convert-from-rpm-to-deb-and-deb-to-rpm-package-using-alien/

作者:Gabriel Cánepa 译者:GOLinux 校对:wxy

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

在 Linux 或类 UNIX 系统下如何使用 KSH 或 BASH shell 逐行读取一个文件?

在 Linux、OSX、 *BSD 或者类 Unix 系统下你可以使用 ​​while..do..done 的 bash 循环来逐行读取一个文件。

在 Bash Unix 或者 Linux shell 中逐行读取一个文件的语法

对于 bash、ksh、 zsh 和其他的 shells 语法如下

while read -r line; do COMMAND; done < input.file

通过 -r 选项传递给 read 命令以防止阻止解释其中的反斜杠转义符。

在 read 命令之前添加 IFS= 选项,来防止首尾的空白字符被去掉。

while IFS= read -r line; do COMMAND_on $line; done < input.file

这是更适合人类阅读的语法:

#!/bin/bash
input="/path/to/txt/file"
while IFS= read -r var
do
  echo "$var"
done < "$input"

示例

下面是一些例子:

#!/bin/ksh
file="/home/vivek/data.txt"
while IFS= read line
do
    # display $line or do somthing with $line
    echo "$line"
done <"$file"

在 bash shell 中相同的例子:

#!/bin/bash
file="/home/vivek/data.txt"
while IFS= read -r line
do
    # display $line or do somthing with $line
    printf '%s\n' "$line"
done <"$file"

你还可以看看这个更好的:

#!/bin/bash
file="/etc/passwd"
while IFS=: read -r f1 f2 f3 f4 f5 f6 f7
do
    # display fields using f1, f2,..,f7
    printf 'Username: %s, Shell: %s, Home Dir: %s\n' "$f1" "$f7" "$f6"
done <"$file"

示例输出:

Fig.01: Bash shell scripting- read file line by line demo outputs

图01:Bash 脚本:读取文件并逐行输出文件

Bash 脚本:逐行读取文本文件并创建为 pdf 文件

我的输入文件如下(faq.txt):

4|http://www.cyberciti.biz/faq/mysql-user-creation/|Mysql User Creation: Setting Up a New MySQL User Account
4096|http://www.cyberciti.biz/faq/ksh-korn-shell/|What is UNIX / Linux Korn Shell?
4101|http://www.cyberciti.biz/faq/what-is-posix-shell/|What Is POSIX Shell?
17267|http://www.cyberciti.biz/faq/linux-check-battery-status/|Linux: Check Battery Status Command
17245|http://www.cyberciti.biz/faq/restarting-ntp-service-on-linux/|Linux Restart NTPD Service Command
17183|http://www.cyberciti.biz/faq/ubuntu-linux-determine-your-ip-address/|Ubuntu Linux: Determine Your IP Address
17172|http://www.cyberciti.biz/faq/determine-ip-address-of-linux-server/|HowTo: Determine an IP Address My Linux Server
16510|http://www.cyberciti.biz/faq/unix-linux-restart-php-service-command/|Linux / Unix: Restart PHP Service Command
8292|http://www.cyberciti.biz/faq/mounting-harddisks-in-freebsd-with-mount-command/|FreeBSD: Mount Hard Drive / Disk Command
8190|http://www.cyberciti.biz/faq/rebooting-solaris-unix-server/|Reboot a Solaris UNIX System

我的 bash 脚本:

#!/bin/bash
# Usage: Create pdf files from input (wrapper script)
# Author: Vivek Gite <Www.cyberciti.biz> under GPL v2.x+
#---------------------------------------------------------

#Input file
_db="/tmp/wordpress/faq.txt"

#Output location
o="/var/www/prviate/pdf/faq"

_writer="~/bin/py/pdfwriter.py"

# If file exists 
if [[ -f "$_db" ]]
then
    # read it
    while IFS='|' read -r pdfid pdfurl pdftitle
    do
        local pdf="$o/$pdfid.pdf"
        echo "Creating $pdf file ..."
    #Genrate pdf file
        $_writer --quiet --footer-spacing 2 \
        --footer-left "nixCraft is GIT UL++++ W+++ C++++ M+ e+++ d-" \
        --footer-right "Page [page] of [toPage]" --footer-line \
        --footer-font-size 7 --print-media-type "$pdfurl" "$pdf"
    done <"$_db"
fi

技巧:从 bash 变量中读取

让我们看看如何在 Debian 或者 Ubuntu Linux 下列出所有安装过的 php 包,请输入:

# 我将输出内容赋值到一个变量名为 $list中 #

list=$(dpkg --list php\* | awk '/ii/{print $2}')
printf '%s\n' "$list"

示例输出:

php-pear
php5-cli
php5-common
php5-fpm
php5-gd
php5-json
php5-memcache
php5-mysql
php5-readline
php5-suhosin-extension

你现在可以从 $list 中看到它们,并安装这些包:

#!/bin/bash
# BASH can iterate over $list variable using a "here string" #
while IFS= read -r pkg
do
    printf 'Installing php package %s...\n' "$pkg"
    /usr/bin/apt-get -qq install $pkg
done <<< "$list"
printf '*** Do not forget to run php5enmod and restart the server (httpd or php5-fpm) ***\n'

示例输出:

Installing php package php-pear...
Installing php package php5-cli...
Installing php package php5-common...
Installing php package php5-fpm...
Installing php package php5-gd...
Installing php package php5-json...
Installing php package php5-memcache...
Installing php package php5-mysql...
Installing php package php5-readline...
Installing php package php5-suhosin-extension...

*** Do not forget to run php5enmod and restart the server (httpd or php5-fpm) ***

via: http://www.cyberciti.biz/faq/unix-howto-read-line-by-line-from-file/

作者: VIVEK GIT 译者:strugglingyouth 校对:wxy

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