分类 技术 下的文章

在 Linux 系统中,当你输入一个命令,再按两次 TAB 键,就会列出所有以你输入字符开头的可用命令。这并不新鲜,可能你已经知道了。这个功能被称作 命令行补全 bash completion 。默认情况下,bash 命令行可以自动补全文件或目录名称。不过,我们可以增强 bash 命令补全功能,通过 complete 命令让它达到新的高度。

这个教程说明了我们是怎样使用 可编程的命令行补全功能 programmable completion 把自动补全功能应用于选项或者命令行参数。

例如:在输入 write 命令之后,如果你按两次 TAB 按键,自动补全功能会提供可供执行 write 操作的用户列表。

$ write [TAB][TAB]
bala      raj
jason     randy
john      ritu
mayla     thomas
nisha     www-data

在下面的例子中,可以为 telnet 命令显示可用的主机名:

$ telnet [TAB][TAB]
localhost  dev-db  fileserver

要让可编程命令补全功能在你的终端起作用 ,你只需要如下执行/etc/bash_completion即可:

# . /etc/bash_completion

你也可以取消/etc/bash.bashrc(来自 Ubuntu Linux 13.04 系统)中如下的注释,这样,你就可以不需要执行上面的命令了:

### enable bash completion in interactive shells
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

如果你没有发现这些代码,也没有找到/etc/bash_completion文件,那么你只需要通过使用apt-get命令来安装bash\_completion 包即可。

1. 查看已有的命令行补全

在启用可编程的命令行补全功能后,就已经有了一些定义好的命令补全功能。complete 命令用于定义命令行补全。

要查看已有的命令行补全,如下使用 complete 命令:

complete -p | less

上面例子中的 -p 选项是可选的。

2. 列出 bash 中标准补全功能

默认情况下,Bash 为 Linux 用户提供了下列标准补全功能。

  1. 变量补全
  2. 用户名补全
  3. 主机名补全
  4. 路径补全
  5. 文件名补全

我们在之前的 bash 标准补全中讨论过这些。

3. 定义一个命令名补全

通过 -c 选项可以将所有的可用命令作为一个命令的补全参数。在下面的例子里面,为 which 命令定义了一个补全(LCTT译注:在按两下 TAB 时,可以列出所有命令名作为可补全的参数)。

$ complete -c which

$ which [TAB][TAB]
Display all 2116 possibilities? (y or n)

如上,如果按下 ‘y’,就会列出所有的命令名。

4. 定义一个目录补全

通过选项 -d,可以定义一个仅包含目录名的补全参数。在下面的例子中,为 ls 命令定义了补全。

$ ls
countfiles.sh  dir1/          dir2/          dir3/

$ complete -d ls

$ ls [TAB][TAB]
dir1/          dir2/          dir3/

如上,连按下 TAB 仅会显示目录名。

5. 定义一个后台任务名补全

补全功能也能够以任务名作为补全参数。选项 -j 可以定义任务名作为传递给命令的参数,如下:

$ jobs
[1]-  Stopped                 cat
[2]+  Stopped                 sed 'p'

$ complete -j ./list_job_attrib.sh

$ ./list_job_attrib.sh [TAB][TAB]
cat   sed

关于后台任务,你可以参考 Linux 后台任务中的例子了解如何管理后台任务。

6. 带有前缀和后缀的补全

补全功能可以为实际的补全内容定义前缀和后缀。在下面的例子中,为 list\_job\_attrib.sh 定义了补全内容的前缀和后缀。

$ jobs 
[1]+  Stopped                 cat

$ complete -P '">' -S '<"' ./list_job_attrib.sh

$ ./list_job_attrib.sh [TAB][TAB]

$ ./list_job_attrib.sh ">cat<"

7. 带有排除的文件名和目录名补全

假如脚本运行完成后,输出目录如下:

$ cd output/

$ ls
all_calls.txt   incoming_calls.txt   outgoing_calls.txt   missed_calls.txt
parser_mod.tmp  extract.o

如上,如果你想要 ls 命令的补全忽略 .tmp 和 .o 文件:

$ export FIGNORE='.tmp:.o'

$ complete -f -d ls

$ cd output

$ ls [TAB][TAB]
all_calls.txt   incoming_calls.txt   outgoing_calls.txt   missed_calls.txt

FIGNORE 是一个环境变量,它包含了自动补全所需要排除的文件名后缀。

8. 通过 IFS 变量分割字符串得到补全值

可以通过 -W 选项定义补全值列表,然后通过 IFS 环境变量进行切分。切分结果会展开变量并作为补全显示。

$ export IFS=" "

$ complete -W "bubble quick" ./sort_numbers.sh

$ ./sort_numbers.sh [TAB][TAB]
bubble   quick

如上所述,字符串通过 IFS 分隔符进行切分后,内嵌的变量会被展开为变量值,所以可以如下使用变量:

$ echo $SORT_TYPE1
bubble

$ echo $SORT_TYPE2
quick

$ complete -W "$SORT_TYPE1 $SORT_TYPE2" ./sort_numbers.sh
$ ./sort_numbers.sh [TAB][TAB]
bubble   quick

9. 写个函数来生成补全

你可以引入一个函数来定义补全。使用 -F 选项将函数名传给 complete 命令,执行函数生成补全内容。例如,函数如下:

_parser_options()
{
  local curr_arg;

  curr_arg=${COMP_WORDS[COMP_CWORD]}

  COMPREPLY=( $(compgen -W '-i --incoming -o --outgoing -m --missed' -- $curr_arg ) );
}

在上述函数中:

  1. COMPREPLY : 该数组控制连按下 TAB 后显示的结果
  2. COMP\_WORDS : 该数组包含命令行输入的单词
  3. COMP\_CWORD : COMP\_WORDS 数组的索引,使用它来区分命令行可以访问的单词位置
  4. compgen : -W 基于 $current\_arg 提供可能的补全及其参数

该函数放在 parser\_option 文件中,并通过 source 命令引入:

$ source parser_option

将该函数和你的 parser.pl 脚本关联起来:

$ complete -F _parser_options ./parser.pl

$ ./parser.pl [TAB][TAB]
-i       --incoming       -o       --outgoing       -m       --missed

如上,parser.pl 的选项是由函数 \_parser\_options() 生成的。

提示: 查看/etc/bash_completion 来了解更多的可编程补全函数。

10. 当第一个规则没有生成结果时,就使用第二个

如果定义的补全规则没有生成匹配时,可以使用 -o 选项生成补全。

$ complete -F _count_files -o dirnames ./countfiles.sh

如上,为 ./countfiles.sh 定义了 \_count\_files 补全函数。 如果 the \_count\_files() 函数没有生成任何匹配的话,就会触发目录补全。

$ ls 
countfiles.sh    dir1/      dir2/      dir3/

$./countfiles.sh [TAB][TAB]
dir1    dir2    dir3

在这篇文章中,我们将回顾如何在 RHEL7 中安装,更新和删除软件包。我们还将介绍如何使用 cron 进行任务自动化,并完成如何查找和监控系统日志文件,以及为什么这些技能是系统管理员必备技能。

Yum Package Management Cron Jobs Log Monitoring Linux

RHCSA: Yum包管理、任务计划和系统监控 – Part 10

使用yum 管理包

要安装一个包以及所有尚未安装的依赖包,您可以使用:

# yum -y install package_name(s)

package\_name(s) 需要是至少一个真实的软件包名

例如,安装 httpd 和 mlocate(按顺序),输入。

# yum -y install httpd mlocate

注意: 字符 y 表示绕过执行下载和安装前的确认提示。如果需要提示,你可以不用它。

默认情况下,yum 将安装与操作系统体系结构相匹配的包,除非通过在包名加入架构名。

例如,在 64 位系统上,yum install package将安装包的 x86\_64 版本,而 yum install package.x86(如果有的话)将安装 32 位的。

有时,你想安装一个包,但不知道它的确切名称。search all 选项可以在当前启用的软件库中的包名称和包描述中搜索它,或者search选项可以在包名称中搜索。

比如,

# yum search log

将搜索安装的软件库中名字和摘要与该词(log)类似的软件,而

# yum search all log

也将在包描述和网址中寻找寻找相同的关键字。

一旦搜索返回包列表,您可能希望在安装前显示一些信息。这时 info 选项派上了用场:

# yum info logwatch

Search Package Information

搜索包信息

您可以定期用以下命令检查更新:

# yum check-update

上述命令将返回可以更新的所有已安装的软件包。在下图所示的例子中,只有 rhel-7-server-rpms 有可用更新:

Check For Package Updates

检查包更新

然后,您可以更新该包,

# yum update rhel-7-server-rpms

如果有几个包可以一同更新,可以使用 yum update 一次性更新所有的包。

当你知道一个可执行文件的名称,如 ps2pdf,但不知道那个包提供了它?你可以通过 yum whatprovides “*/[executable]”找到:

# yum whatprovides “*/ps2pdf”

Find Package Belongs to Which Package

查找文件属于哪个包

当删除包时,你可以使用 yum remove Package ,很简单吧?Yum 是一个完整而强大的包管理器。

# yum remove httpd

文本式 RPM 工具

RPM(又名 RPM 包管理器,原意是 RedHat 软件包管理器)也可用于安装或更新独立的rpm格式的软件包。

往往使用 -Uvh 表明如果这个包没有安装就安装它,如果已存在就尝试更新。这里-U表示更新、-v表示显示详细输出,用-h显示进度条。例如

# rpm -Uvh package.rpm

rpm 的另一个典型的使用方法是列出所有安装的软件包,

# rpm -qa

Query All RPM Packages

查询所有包

使用 Cron 调度任务

Linux 和 UNIX 类操作系统包括一个称为 Cron 的工具,允许你周期性调度任务(即命令或 shell 脚本)。cron 会每分钟定时检查 /var/spool/cron 目录中有在 /etc/passwd 帐户文件中指定用户名的文件。

执行命令时,命令输出是发送到该 crontab 的所有者(或者可以在 /etc/crontab,通过 MAILTO 环境变量中指定用户)。

crontab 文件(可以通过键入 crontab -e并按 Enter 键创建)的格式如下:

Crontab Entries

crontab条目

因此,如果我们想在每个月第二天上午2:15更新本地文件数据库(用于按名字或通配模式定位文件),我们需要添加以下 crontab 条目:

15 02 2 * * /bin/updatedb

以上的条目的意思是:”每年每月第二天的凌晨 2:15 运行 /bin/updatedb,无论是周几”,我想你也猜到了。星号作为通配符。

正如我们前面所提到的,添加一个 cron 任务后,你可以看到一个名为 root 的文件被添加在 /var/spool/cron。该文件列出了所有的 crond 守护进程应该运行的任务:

# ls -l /var/spool/cron

Check All Cron Jobs

检查所有cron任务

在上图中,显示当前用户的 crontab 可以使用 cat /var/spool/cron

# crontab -l

如果你需要在一个更精细的时间上运行的任务(例如,一天两次或每月三次),cron 也可以做到。

例如,每个月1号和15号运行 /my/script 并将输出导出到 /dev/null (丢弃输出),您可以添加如下两个crontab 条目:

01 00 1 * * /myscript > /dev/null 2>&1
01 00 15 * * /my/script > /dev/null 2>&1

不过为了简单,你可以将他们合并:

01 00 1,15 * *  /my/script > /dev/null 2>&1

跟着前面的例子,我们可以在每三个月的第一天的凌晨1:30运行 /my/other/script。

30 01 1 1,4,7,10 * /my/other/script > /dev/null 2>&1

但是当你必须每隔某分钟、小时、天或月来重复某个任务时,你可以通过所需的频率来划分正确的时间。以下与前一个 crontab 条目具有相同的意义:

30 01 1 */3 * /my/other/script > /dev/null 2>&1

或者也许你需要在一个固定的频率或系统启动后运行某个固定的工作,你可以使用下列五个字符串中的一个字符串来指示你想让你的任务计划工作的确切时间:

@reboot     仅系统启动时运行
@yearly     一年一次, 类似与 00 00 1 1 *
@monthly    一月一次, 类似与 00 00 1 * *
@weekly     一周一次, 类似与 00 00 * * 0
@daily      一天一次, 类似与 00 00 * * *
@hourly     一小时一次, 类似与 00 * * * *

定位和查看日志

系统日志存放(并轮转)在 /var/log 目录。根据 Linux 的文件系统层次标准(Linux Filesystem Hierarchy Standard),这个目录包括各种日志文件,并包含一些必要的子目录(如 audit、 httpd 或 samba ,如下图),并由相应的系统守护进程操作:

# ls /var/log

Linux Log Files Location

Linux 日志的位置

其他感兴趣的日志比如 dmesg(包括了所有内核层缓冲区的消息),secure(记录要求用户认证的连接请求),messages(系统级信息),和 wtmp(记录了所有用户的登录、登出)。

日志是非常重要的,它们让你可以看到任何时刻发生在你的系统的事情,以及已经过去的事情。他们是无价的工具,可以排错和监测一个 Linux 服务器,通常使用 tail -f 命令来实时显示正在发生和写入日志的事件。

举个例子,如果你想看你的内核相关的日志,你需要输入如下命令:

# tail -f /var/log/dmesg

同样的,如果你想查看你的 Web 服务器日志,你需要输入如下命令:

# tail -f /var/log/httpd/access.log

总结

如果你知道如何有效的管理包、调度任务、以及知道在哪寻找系统当前和过去操作的信息,你可以放松工作而不会总被吓到。我希望这篇文章能够帮你学习或回顾这些基础知识。

如果你有任何问题或意见,请使用下面的表单反馈给我们。


via: http://www.tecmint.com/yum-package-management-cron-job-scheduling-monitoring-linux-logs/

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

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

有一个神话是 linux 的磁盘从来不需要整理碎片。在大多数情况下这是真的,大多数因为是使用的是优秀的日志文件系统(ext3、4等等)来处理文件系统。然而,在一些特殊情况下,碎片仍旧会产生。如果正巧发生在你身上,解决方法很简单。

什么是磁盘碎片

文件系统会按块更新文件,如果这些块没有连成一整块而是分布在磁盘的各个角落中时,就会形成磁盘碎片。这对于 FAT 和 FAT32 文件系统而言是这样的。在 NTFS 中这种情况有所减轻,但在 Linux(extX)中却几乎不会发生。下面是原因:

在像 FAT 和 FAT32 这类文件系统中,文件紧挨着写入到磁盘中。文件之间没有空间来用于增长或者更新:

NTFS 中在文件之间保留了一些空间,因此有空间进行增长。但因块之间的空间是有限的,碎片也会随着时间出现。

Linux 的日志型文件系统采用了一个不同的方案。与文件相互挨着不同,每个文件分布在磁盘的各处,每个文件之间留下了大量的剩余空间。这就给文件更新和增长留下了很大的空间,碎片很少会发生。

此外,碎片一旦出现了,大多数 Linux 文件系统会尝试将文件和块重新连续起来。

Linux 中的磁盘整理

除非你用的是一个很小的硬盘或者空间不够了,不然 Linux 很少会需要磁盘整理。一些可能需要磁盘整理的情况包括:

  • 如果你编辑的是大型视频文件或者 RAW 照片,但磁盘空间有限
  • 如果你使用一个老式硬件,如旧笔记本,你的硬盘会很小
  • 如果你的磁盘开始满了(大约使用了85%)
  • 如果你的家目录中有许多小分区

最好的解决方案是购买一个大硬盘。如果不可能,磁盘碎片整理就很有用了。

如何检查碎片

fsck 命令会为你做这个,换句话说,如果你可以在 LiveCD 中运行它,那么就可以用于所有卸载的分区

这一点很重要:在已经挂载的分区中运行 fsck 将会严重危害到你的数据和磁盘

你已经被警告过了。开始之前,先做一个完整的备份。

免责声明: 本文的作者与本站将不会对您的文件、数据、系统或者其他损害负责。你需要自己承担风险。如果你继续,你需要接受并了解这点。

你应该启动到一个 live 会话中(如使用安装磁盘,系统救援CD等)并在你卸载的分区上运行 fsck 。要检查是否有任何问题,请在使用 root 权限运行下面的命令:

fsck -fn [/path/to/your/partition]

您可以运行以下命令找到分区的路径

sudo fdisk -l

有一个在已挂载的分区中运行 fsck(相对)安全的方法是使用-n开关。这会对分区进行只读文件系统检查,而不会写入任何东西。当然,这并不能保证十分安全,你应该在创建备份之后进行。在 ext3 中,运行

sudo fsck.ext3 -fn /path/to/your/partition

这会产生大量的输出,大多数错误信息的原因是分区已经挂载了。最后会给出一个碎片相关的信息。

如果碎片率大于 20% 了,那么你应该开始整理你的磁盘碎片了。

如何简单地在 Linux 中整理碎片

你要做的是备份你所有的文件和数据到另外一块硬盘中(手动复制他们),格式化分区,然后重新复制回去(不要使用备份软件)。日志型文件系统会把它们作为新的文件,并将它们整齐地放置到磁盘中而不产生碎片。

要备份你的文件,运行

cp -afv [/path/to/source/partition]/* [/path/to/destination/folder]

记住星号(*)是很重要的。

注意:通常认为复制大文件或者大量文件,使用 dd 或许是最好的。这是一个非常底层的操作,它会复制一切,包含空闲的空间甚至是留下的垃圾。这不是我们想要的,因此这里最好使用 cp

现在你只需要删除源文件。

sudo rm -rf [/path/to/source/partition]/*

可选:你可以使用如下命令将空闲空间用零填充。也可以用格式化来达到这点,但是如果你并没有复制整个分区而仅仅是复制大文件(它通常会形成碎片)的话,就不应该使用格式化的方法了。

sudo dd if=/dev/zero of=[/path/to/source/partition]/temp-zero.txt

等待它结束。你可以用 pv 来监测进度。

sudo apt-get install pv
sudo pv -tpreb | of=[/path/to/source/partition]/temp-zero.txt

这就完成了,只要删除这个用于填充的临时文件就行。

sudo rm [/path/to/source/partition]/temp-zero.txt

待你清零了空闲空间(或者跳过了这步)。重新复制回文件,将第一个cp命令翻转一下:

cp -afv [/path/to/original/destination/folder]/* [/path/to/original/source/partition]

使用 e4defrag

如果你想要简单的方法,安装 e2fsprogs

sudo apt-get install e2fsprogs

用 root 权限在分区中运行 e4defrag。如果你不想或不能卸载该分区,你可以使用它的挂载点而不是路径。要整理整个系统的碎片,运行:

sudo e4defrag  /

在挂载的情况下不保证成功(你也应该在它运行时不要使用你的系统),但是它比复制全部文件再重新复制回来简单多了。

总结

linux 系统中由于它的日志型文件系统有效的数据处理很少会出现碎片。如果你因任何原因产生了碎片,简单的方法是重新分配你的磁盘,如复制出去所有文件并复制回来,或者使用e4defrag。然而重要的是保证你数据的安全,因此在进行任何可能影响你全部或者大多数文件的操作之前,确保你的文件已经被备份到了另外一个安全的地方去了。


via: https://www.maketecheasier.com/defragment-linux/

作者:Attila Orosz 译者:geekpi 校对:wxy

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

让我们假定你有30GB的电影,并且你有3个驱动器,每个的大小为20GB。那么,你会怎么来存放东西呢?

很明显,你可以将你的视频分割成2个或者3个不同的卷,并将它们手工存储到驱动器上。这当然不是一个好主意,它成了一项费力的工作,它需要你手工干预,而且花费你大量时间。

另外一个解决方案是创建一个 RAID磁盘阵列。然而,RAID在存储可靠性,磁盘空间可用性差等方面声名狼藉。另外一个解决方案,就是mhddfs。

Combine Multiple Partitions in Linux

Mhddfs——在Linux中合并多个分区

mhddfs是一个用于Linux的设备驱动,它可以将多个挂载点合并到一个虚拟磁盘中。它是一个基于FUSE的驱动,提供了一个用于大数据存储的简单解决方案。它可以将所有小文件系统合并,创建一个单一的大虚拟文件系统,该文件系统包含其成员文件系统的所有内容,包括文件和空闲空间。

你为什么需要Mhddfs?

你的所有存储设备会创建为一个单一的虚拟池,它可以在启动时被挂载。这个小工具可以智能地照看并处理哪个存储满了,哪个存储空着,以及将数据写到哪个存储中。当你成功创建虚拟驱动器后,你可以使用SAMBA来共享你的虚拟文件系统。你的客户端将在任何时候都看到一个巨大的驱动器和大量的空闲空间。

Mhddfs特性

  • 获取文件系统属性和系统信息。
  • 设置文件系统属性。
  • 创建、读取、移除和写入目录和文件。
  • 在单一设备上支持文件锁和硬链接。
mhddfs的优点mhddfs的缺点
适合家庭用户mhddfs驱动没有内建在Linux内核中
运行简单运行时需要大量处理能力
没有明显的数据丢失没有冗余解决方案
不需要分割文件不支持移动硬链接
可以添加新文件到组成的虚拟文件系统
可以管理文件保存的位置
支持扩展文件属性

Linux中安装Mhddfs

在Debian及其类似的移植系统中,你可以使用下面的命令来安装mhddfs包。

# apt-get update && apt-get install mhddfs

Install Mhddfs on Debian based Systems

安装Mhddfs到基于Debian的系统中

在RHEL/CentOS Linux系统中,你需要开启epel仓库,然后执行下面的命令来安装mhddfs包。

# yum install mhddfs

在Fedora 22及以上系统中,你可以通过dnf包管理来获得它,就像下面这样。

# dnf install mhddfs

Install Mhddfs on Fedora

安装Mhddfs到Fedora

如果万一mhddfs包不能从epel仓库获取到,那么你需要解决下面的依赖,然后像下面这样来编译源码并安装。

  • FUSE头文件
  • GCC
  • libc6头文件
  • uthash头文件
  • libattr1头文件(可选)

接下来,只需从下面建议的地址下载最新的源码包,然后编译。

# wget http://mhddfs.uvw.ru/downloads/mhddfs_0.1.39.tar.gz
# tar -zxvf mhddfs*.tar.gz
# cd mhddfs-0.1.39/
# make

你应该可以在当前目录中看到mhddfs的二进制文件,以root身份将它移动到/usr/bin/和/usr/local/bin/中。

# cp mhddfs /usr/bin/ 
# cp mhddfs /usr/local/bin/

一切搞定,mhddfs已经可以用了。

我怎么使用Mhddfs?

1、 让我们看看当前所有挂载到我们系统中的硬盘。

$ df -h

Check Mounted Devices

样例输出

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda1       511M  132K  511M   1% /boot/efi
/dev/sda2       451G   92G  336G  22% /
/dev/sdb1       1.9T  161G  1.7T   9% /media/avi/BD9B-5FCE
/dev/sdc1       555M  555M     0 100% /media/avi/Debian 8.1.0 M-A 1

注意这里的‘挂载点’名称,我们后面会使用到它们。

2、 创建目录‘/mnt/virtual\_hdd’,所有这些文件系统将会在这里组织到一起。

# mkdir /mnt/virtual_hdd

3、 然后,挂载所有文件系统。你可以通过root或者FUSE组中的某个用户来完成。

# mhddfs /boot/efi, /, /media/avi/BD9B-5FCE/, /media/avi/Debian\ 8.1.0\ M-A\ 1/ /mnt/virtual_hdd  -o allow_other

Mount All File System in Linux

在Linux中挂载所有文件系统

注意:这里我们使用了所有硬盘的挂载点名称,很明显,你的挂载点名称会有所不同。也请注意“-o allow\_other”选项可以让这个虚拟文件系统让其它所有人可见,而不仅仅是创建它的人。

4、 现在,运行“df -h”来看看所有文件系统。它应该包含了你刚才创建的那个。

    $ df -h

Verify Virtual File System Mount

验证虚拟文件系统挂载

你可以像对已挂在的驱动器那样给虚拟文件系统应用所有的选项。

5、 要在每次系统启动创建这个虚拟文件系统,你应该以root身份添加下面的这行代码(在你那里会有点不同,取决于你的挂载点)到/etc/fstab文件的末尾。

mhddfs# /boot/efi, /, /media/avi/BD9B-5FCE/, /media/avi/Debian\ 8.1.0\ M-A\ 1/ /mnt/virtual_hdd fuse defaults,allow_other 0 0

6、 如果在任何时候你想要添加/移除一个新的驱动器到/从虚拟硬盘,你可以挂载一个新的驱动器,拷贝/mnt/vritualhdd的内容,卸载卷,弹出你要移除的的驱动器并/或挂载你要包含的新驱动器。使用mhddfs命令挂载全部文件系统到Virtualhdd下,这样就全部搞定了。

我怎么卸载Virtual\_hdd?

卸载virtual\_hdd相当简单,就像下面这样

# umount /mnt/virtual_hdd

Unmount Virtual Filesystem

卸载虚拟文件系统

注意,是umount,而不是unmount,很多用户都输错了。

到现在为止全部结束了。我正在写另外一篇文章,你们一定喜欢读的。到那时,请保持连线。请在下面的评论中给我们提供有用的反馈吧。请为我们点赞并分享,帮助我们扩散。


via: http://www.tecmint.com/combine-partitions-into-one-in-linux-using-mhddfs/

作者:Avishek Kumar 译者:GOLinux 校对:wxy

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

Web 服务器(也被称为 HTTP 服务器)是在网络中将内容(最为常见的是网页,但也支持其他类型的文件)进行处理并传递给客户端的服务。

FTP 服务器是最为古老且最常使用的资源之一(即便到今天也是这样),在身份认证不是必须的情况下,它可通过客户端在一个网络访问文件,因为 FTP 使用没有加密的用户名和密码,所以有些情况下不需要验证也行。

在 RHEL 7 中可用的 web 服务器是版本号为 2.4 的 Apache HTTP 服务器。至于 FTP 服务器,我们将使用 Very Secure Ftp Daemon (又名 vsftpd) 来建立用 TLS 加固的连接。

配置和加固 Apache 和 FTP 服务器

RHCSA: 安装,配置及加固 Apache 和 FTP 服务器 – Part 9

在这篇文章中,我们将解释如何在 RHEL 7 中安装、配置和加固 web 和 FTP 服务器。

安装 Apache 和 FTP 服务器

在本指导中,我们将使用一个静态 IP 地址为 192.168.0.18/24 的 RHEL 7 服务器。为了安装 Apache 和 VSFTPD,运行下面的命令:

# yum update && yum install httpd vsftpd

当安装完成后,这两个服务在开始时是默认被禁用的,所以我们需要暂时手动开启它们并让它们在下一次启动时自动地开启它们:

# systemctl start httpd
# systemctl enable httpd
# systemctl start vsftpd
# systemctl enable vsftpd

另外,我们必须打开 80 和 21 端口,它们分别是 web 和 ftp 守护进程监听的端口,为的是允许从外面访问这些服务:

# firewall-cmd --zone=public --add-port=80/tcp --permanent
# firewall-cmd --zone=public --add-service=ftp --permanent
# firewall-cmd --reload

为了确认 web 服务工作正常,打开你的浏览器并输入服务器的 IP,则你应该可以看到如下的测试页面:

确认 Apache Web 服务器

确认 Apache Web 服务器

对于 ftp 服务器,在确保它如期望中的那样工作之前,我们必须进一步地配置它,我们将在几分钟后来做这件事。

配置并加固 Apache Web 服务器

Apache 的主要配置文件位于 /etc/httpd/conf/httpd.conf 中,但它可能依赖 /etc/httpd/conf.d 中的其他文件。

尽管默认的配置对于大多数的情形都够用了,但熟悉在 官方文档 中介绍的所有可用选项是一个不错的主意。

同往常一样,在编辑主配置文件前先做一个备份:

# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.$(date +%Y%m%d)

然后用你钟爱的文本编辑器打开它,并查找下面这些变量:

  • ServerRoot: 服务器的配置,错误和日志文件保存的目录。
  • Listen: 通知 Apache 去监听特定的 IP 地址或端口。
  • Include: 允许包含其他配置文件,要包含的文件必须存在,否则,服务器将会失败。它恰好与 IncludeOptional 相反,假如特定的配置文件不存在,它将静默地忽略掉它们。
  • UserGroup: 运行 httpd 服务的用户/组的名称。
  • DocumentRoot: Apache 为你的文档所服务的目录。默认情况下,所有的请求将在这个目录中被获取,但符号链接和别名可能会被用于指向其他位置。
  • ServerName: 这个指令将设定用于识别它自身的主机名(或 IP 地址)和端口。

安全措施的第一步将包含创建一个特定的用户和组(如 tecmint/tecmint)来运行 web 服务器,以及更改默认的端口为一个更高的端口(在这个例子中为 9000) (LCTT 译注:如果你的 Web 服务器对外公开提供服务,则不建议修改为非默认端口。):

ServerRoot "/etc/httpd"
Listen 192.168.0.18:9000
User tecmint
Group tecmint
DocumentRoot "/var/www/html"
ServerName 192.168.0.18:9000

你可以使用下面的命令来测试配置文件:

# apachectl configtest

假如一切 OK,接着重启 web 服务器。

# systemctl restart httpd

并别忘了在防火墙中开启新的端口(并禁用旧的端口):

# firewall-cmd --zone=public --remove-port=80/tcp --permanent
# firewall-cmd --zone=public --add-port=9000/tcp --permanent
# firewall-cmd --reload

请注意,由于 SELinux 策略,你只能给给 web 服务器使用如下命令所返回的端口。

# semanage port -l | grep -w '^http_port_t'

假如你想让 httpd 服务使用另一个端口(如 TCP 端口 8100),你必须将它加到 SELinux 的端口上下文:

# semanage port -a -t http_port_t -p tcp 8100

添加 Apache 端口到 SELinux 策略

添加 Apache 端口到 SELinux 策略

为了进一步加固你安装的 Apache,请遵循以下步骤:

  1. 运行 Apache 的用户不应该拥有访问 shell 的能力:
# usermod -s /sbin/nologin tecmint
  1. 禁用目录列表功能,这是为了阻止浏览器展示一个未包含 index.html 文件的目录里的内容。

编辑 /etc/httpd/conf/httpd.conf (以及虚拟主机的配置文件,假如有的话),并确保出现在顶层的和Directory 块中的 Options 指令都被设置为 None:

Options None
  1. 在 HTTP 响应中隐藏有关 web 服务器和操作系统的信息。像下面这样编辑文件 /etc/httpd/conf/httpd.conf
ServerTokens Prod 
ServerSignature Off

现在,你已经做好了从 /var/www/html 目录开始服务内容的准备了。

配置并加固 FTP 服务器

和 Apache 的情形类似, Vsftpd 的主配置文件 /etc/vsftpd/vsftpd.conf 带有详细的注释,且虽然对于大多数的应用实例,默认的配置应该足够了,但为了更有效率地操作 ftp 服务器,你应该开始熟悉相关的文档和 man 页 man vsftpd.conf(对于这点,再多的强调也不为过!)。

在我们的示例中,使用了这些指令:

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
allow_writeable_chroot=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

通过使用 chroot_local_user=YES,(默认情况下)本地用户在登录之后,将被限制在以用户的家目录为 chroot 监狱的环境中。这意味着本地用户将不能访问除其家目录之外的任何文件。

最后,为了让 ftp 能够在用户的家目录中读取文件,设置如下的 SELinux 布尔值:

# setsebool -P ftp_home_dir on

现在,你可以使用一个客户端例如 Filezilla 来连接一个 ftp 服务器:

查看 FTP 连接

查看 FTP 连接

注意, /var/log/xferlog 日志将会记录下载和上传的情况,这与上图的目录列表一致:

监视 FTP 的下载和上传情况

监视 FTP 的下载和上传情况

另外请参考: 在 Linux 系统中使用 Trickle 来限制应用使用的 FTP 网络带宽

总结

在本教程中,我们解释了如何设置 web 和 ftp 服务器。由于这个主题的广泛性,涵盖这些话题的所有方面是不可能的(如虚拟主机)。因此,我推荐你也阅读这个网站中有关 Apache 的其他卓越的文章。


via: http://www.tecmint.com/rhcsa-series-install-and-secure-apache-web-server-and-ftp-in-rhel/

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

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

在学习如何开启Ubuntu系统自动升级之前,先解释下为什么需要自动升级。

默认情况下,ubuntu每天一次检查更新。但是一周只会弹出一次软件升级提醒,除非当有安全性升级时,才会立即弹出。所以,如果你已经使用Ubuntu一段时间,你肯定很熟悉这个画面:

Ubuntu软件升级提醒

但是做为一个正常桌面用户,根本不会去关心有什么更新细节。而且这个提醒完全就是浪费时间,你肯定信任Ubuntu提供的升级补丁,对不对?所以,大部分情况你肯定会选择“现在安装”,对不对?

所以,你需要做的就只是点一下升级按钮。现在,明白为什么需要自动系统升级了吧?开启自动系统升级意味着所有最新的更新都会自动下载并安装,并且没有请求确认。是不是很方便?

开启Ubuntu自动升级

演示使用Ubuntu15.04,Ubuntu 14.04步骤类似。

打开Unity Dash ,找到软件&更新:

Ubuntu 软件升级设置

打开软件资源设置,切换到升级标签:

Ubuntu 软件升级设置

可以发现,默认设置就是每日检查并立即提醒安全升级。

改变软件更新频率

改变 ‘当有安全升级’和‘当有其他升级’的选项为:下载并自动安装。

Automatic updates in Ubuntu

关闭对话框完成设定。这样每次Ubuntu检查更新后就会自动升级。事实上,这篇文章十分类似改变Ubuntu升级提醒频率

你喜欢自动升级还是手动安装升级呢?欢迎评论。


via: http://itsfoss.com/automatic-system-updates-ubuntu/

作者:Abhishek 译者:Vic020/VicYu 校对:wxy

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