分类 技术 下的文章

首先致上每日问候。Linux的浩瀚无垠,使人总能每次都提交与众不同的内容。我们“The-Tecmint-Team”的工作是给我们的读者提供一些独特的内容,这些内容不仅对他们的职业生涯很有用,同时也让他们增长知识。在此,我们就尝试这么去做,至于能取得多大的成功,就由我们的读者朋友们来判断吧。

Questions on Shell Scripting

我们为各类用户提供了关于Shell脚本语言和面试问题的很多教程,可以访问以下链接去阅读这些文章。

在此,作为shell脚本的附加内容,在本文中我们将从面试的角度解读与Linux Shell相关的问题。

1. 在shell脚本成功执行前,如何中断脚本执行?

解答:我们需要使用‘exit’命令来实现以上描述的情境。‘exit’命令被强制输出非0值时,脚本会报错并退出。在Unix环境下的shell脚本中,0值表示成功执行。因此,在脚本终止前执行一个不带引号的‘exit -1’命令将使脚本中止。

例如,创建以下一个名为“anything.sh”的脚本。

#!/bin/bash
echo "Hello"
exit -1
echo "bye"

保存文件并执行。

# sh anything.sh

Hello
exit.sh: 3: exit: Illegal number: -1

从上面的脚本中可以清楚地看到,在exit -1命令前,脚本执行得很好。

2. 如何使用Linux命令来移除文件头?

解答:当我们需要删除文件中的指定行时,‘sed’命令可以用来解决该问题。

这个是用来删除文件头(文件的首行)的正确命令。

# sed '1 d' file.txt

上面命令的问题是,它会在标准输出设备上输出不带首行的文件内容。为了保存输出到文件,我们需要使用重定向操作符,它将帮助你将输出重定向到文件。

# sed '1 d' file.txt > new_file.txt

好吧,其实sed命令内建的‘-i’开关就可以干这活,就不需要重定向符了吧。

# sed -i '1 d' file.txt

3. 你怎么检查一个文本文件中某一行的长度?

解答:‘sed’命令也可以用来查找文本文件中的某一行或者检查其长度。

sed -n ‘n p’ file.txt’可以解决,这里‘n’表示行号,‘p’打印出匹配内容(到标准输出),该命令通常与-n命令行选项连用。那么,怎样来获取长度计数呢?很明显,我们需要通过管道输出给‘wc’命令来计算。

# sed –n 'n p' file.txt | wc –c

要得到文本文件‘tecmint.txt’的第五行的长度,运行如下命令:

# sed -n '5 p' tecmint.txt | wc -c

4. 可以在Linux系统上查看到所有非打印字符吗?你是怎么做到的?

解答:可以。可以在Linux中查看所有的非打印字符。要实现上面所讲的方案,我们需要‘vi’编辑器的帮助。 怎样在‘vi’编辑器中显示非打印字符?
  • 打开vi编辑器。
  • 先按[esc]键,然后按‘:’进入到vi编辑器的命令模式。
  • 最后,从‘vi’编辑器的命令界面输入set list命令并执行。

: 这种方式可以查看文本文件中的所有非打印字符,包括ctrl+m(^M)

5. 假如你是一个员工组的团队领导,为xyz公司工作。公司要求你创建一个‘dir\_xyz’目录,让该组成员都能在该目录下创建或访问文件,但是除了文件创建者之外的其他人不能删除文件,你会怎么做?

解答:这真是个有趣的工作方案。好吧,上面所讲的方案,我们需要通过下面的步骤来实施,这简直就是小菜一碟。
# mkdir dir_xyz
# chmod g+wx dir_xyz
# chmod +t dir_xyz

第一行命令创建了一个目录(dir\_xyz),上面的第二行命令让组(g)具有‘写’和‘执行’的权限,而上面的最后一行命令——权限位最后的‘+t’是‘粘滞位’,它用来替换‘x’,表明在这个目录中,文件只能被它们的拥有者、目录的拥有者或者是超级用户root删除。

6. 你能告诉我一个Linux进程经历的各个阶段吗?

解答:一个Linux进程在它的一生中,通常经历了四个主要阶段。

这里是Linux进程要经历的四个阶段。

  • 等待:Linux进程等待资源。
  • 运行:Linux进程当前正在执行中。
  • 停止:Linux进程在成功执行后或收到杀死进程信号后停止。
  • 僵尸:如果该进程已经结束,但仍然留在进程表中,被称为‘僵尸’。

7. Linux中cut命令怎么用?

解答:‘cut’是一个很有用的Linux命令,当我们要截取文件的指定部分并打印到标准输出,当文本区域以及文件本身很大时,这个命令很有用。

例如,截取‘txt\_tecmint’文件的前10列。

# cut -c1-10 txt_tecmint

要截取该文件中的第二,第五和第七列。

# cut -d;-f2 -f5 -f7 txt_tecmint

8. ‘cmp’和‘diff’命令的区别是什么?

解答:‘cmp’和‘diff’命令用来获取相同的东西,但各有侧重。

diff’命令输出为了使两个文件一样而应该做的修改。而‘cmp’命令则将两个文件逐字节对比,并报告第一个不匹配的项。

9. 可以用‘echo’命令来替换‘ls’命令吗?

解答:可以的。‘ls’命令可以用‘echo’命令来替代。‘ls’命令列出目录内容,从替换上述命令的角度讲,我们可以使用‘echo *’,两个命令的输出完全一样。

10. 你可能听过inode吧。你能简要描述一下inode吗?

解答:‘inode’是一个‘数据结构’,在Linux上用于文件标识。每个文件在Unix系统上有一个独立的‘inode’和一个‘唯一的’inode号。

到此为止吧。在下一篇文章中,我们将讨论另外一些有趣味性而又有知识性的面试问题。到那时,别跑开,请上Tecmint.com,别忘了在下面的评论部分给我们提供一些有价值的反馈哦。


via: http://www.tecmint.com/interview-questions-on-shell-scripting/

译者:GOLinux 校对:wxy

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

欢迎进入Linux内核系列文章的下一篇!本篇我们继续配置文件系统。

首先,我们启用"General filesystem local caching manager",它允许内核存储文件系统缓存。这可以增加在存储空间开销上的性能。

为了调试目的,缓存系统可以通过统计信息监控(Gather statistical information on local caching)。通常上,这个特性应该只在你计划调试的时候启用。

下面的特性很像上面的,但是这个特性存储延迟信息(Gather latency information on local caching)。再说一次,这是个调试特性。

"Debug FS-Cache"提供了很多其他的缓存系统的调试功能。

下面的缓存调试工具会保存文件系统缓存对象的全局列表(任何进程可以访问这个列表)(Maintain global object list for debugging purposes)。

为了增强网络文件系统的速度,启用接下来的驱动(Filesystem caching on files)。这个特性允许整个本地文件系统被用于远程文件系统和存储单元的缓存。Linux内核会管理这个分区。

有两种不同的用于调试的驱动可用于本地缓存系统和远程文件系统,它们是(Debug CacheFiles)和(Gather latency information on CacheFiles)。

大多数通常的光盘文件系统是ISO 9660标准的ISO-9660,故名(ISO 9660 CDROM file system support)。这个驱动用于读/写主流的光盘。

当读取光盘中的长Unicode文件名或者这类文件时,需要这个驱动(Microsoft Joliet CDROM extensions)。这是ISO-9660文件系统的扩展。

"Transparent decompression extension"允许数据以压缩形式写入并以透明方式解压读出。这允许光盘上存放更多的数据。

"UDF file system support"允许内核读/写UDF文件系统的可重写光盘。UDF被设计用来管理增量写入。UDF允许光盘思想闪存盘那样使用。系统可以比常规ISO-9660文件系统写入的光盘更快地写入以及更新。然而,这并不比使用闪存快。

如你所知,Windows是一个很流行的系统。有很多存储器使用FAT文件系统。万幸的是,Linux支持这样的文件系统。这会明显地增加内核的大小,但是既然FAT文件系统是如此的通用,那么这点开销也是值得的。

为了支持FAT文件系统,启用这个驱动(VFAT (Windows-95) fs support)。在写本篇的时候。驱动还不支持FAT64(通常成为exFAT)。

代码页的大小可以在这里设置(Default codepage for FAT)。

在此之后,可以设置FAT文件系统的默认字符集(Default iocharset for FAT)。

NTFS文件系统在这个驱动提供支持(Default iocharset for FAT)。驱动提供了只读特性。为了写入NTFS,启用这个驱动(NTFS write support)。

Linux内核提供了NTFS文件系统的调试工具(NTFS debugging support)。

要在root根目录下有个proc目录,必须启用这个特性(/proc file system support)。一些其他相似的驱动依赖于这个,包括(/proc/kcore support)、(/proc/vmcore support)和 (Sysctl support (/proc/sys))。proc系统("process"的缩写)使用的proc文件系统有时称作procfds。这个文件系统在硬件的内存中,并在启用时创建。因此,当你在浏览proc中的文件时,用户仿佛像在其他存储单元上那样浏览内存。proc扮演一个用户空间和内核空间之间接口的角色。proc是在内核空间。

"Enable /proc page monitoring"提供了一些文件监视进程的内存利用。

"sysfs file system support"创建/sys文件加。sys文件系统在内存中并提供了内核对象的接口。

tmp目录被许多应用需要,包括Linux自己,因此强烈建议启用这个驱动(Tmpfs virtual memory file system support (former shm fs))。tmp文件系统可能存储在硬盘或者内存中,并只被用于存储临时文件。

Tmpfs POSIX Access Control Lists"驱动tmpfs虚拟文件系统额外的文件权限特性。

"Tmpfs extended attributes"提供了通常的tmpfs更多的属性。

"HugeTLB file system support"驱动提供了基于ramfs的hugetlbfs文件系统。这个虚拟文件系统包含了HugeTLB页。

configfs文件系统是一个以文件系统形式存在的内核对象管理器(Userspace-driven configuration filesystem)。强烈建议启用这个驱动。ConfigFS很像sysfs。然而,ConfigFS被用于创建和删除内核对象,而sysfs被用于浏览和修改内核对象。

下面,我们可以回到"真正"的文件系统了。那就是用户用来存放他们个人文件的文件系统。下面,内核能够读取ADFS文件系统(ADFS file system support)。

AFDFS文件系统写入被一个独立且不稳定的驱动提供 (ADFS write support (DANGEROUS))。ADFS代表Advanced Disc Filing System(高级光盘归档系统)。

Linux同样支持Amiga快速文件系统(Amiga FFS file system support)。 http://www.linux.org/threads/amiga-fast-file-system-affs.4429/

"eCrypt filesystem layer support"提供了POSIX兼容的加密文件系统层。这个eCrypt可以 用于任何文件系统无论驻留的文件系统分区表是什么。http://www.linux.org/threads/intro-to-encryption.4376/

eCrypt层可以有一个设备文件如果启用了这个驱动(Enable notifications for userspace key wrap/unwrap)。设备路径是/dev/ecryptfs。

Linux同样支持HFS和HFS+(Apple Macintosh file system support)和(Apple Extended HFS file system support)。http://www.linux.org/threads/hierarchical-file-system-hfs.4480/与http://www.linux.org/threads/hierarchical-file-system-plus-hfs.4493/

BeFS可以在Linux上作为只读文件系统使用(BeOS file system (BeFS) support (read only))。通常上,编写读取特性比编写写入能力简单。

特殊的BeFS调试特性(Debug BeFS)。

EFS是另外一个Linux只读不写的文件系统。 (EFS file system support (read only)). http://www.linux.org/threads/extent-file-system-efs.4447/

一些闪存可能使用JFFS2文件系统(Journalling Flash File System v2 (JFFS2) support)。下面,可以设置调试层 (JFFS2 debugging verbosity)。 http://www.linux.org/threads/journaling-flash-file-system-version-2-jffs2.4495/

为了在NAND和NOR闪存上使用JFFS2,需要这个驱动(JFFS2 write-buffering support)。

下面的驱动提供了更好的错误保护(Verify JFFS2 write-buffer reads)。

启用"JFFS2 summary support"可以更快挂载JFFS文件系统。这个驱动存储文件系统的信息。

像其他的文件系统的扩展/额外属性驱动一样,JFFS2也有这种驱动(JFFS2 XATTR support)。

JFFS2文件系统支持不同的透明压缩系统。这允许JFFS2系统上的文件更小,并且在读取时不需要用户任何特殊的操作。 (Advanced compression options for JFFS2)、 (JFFS2 ZLIB compression support)、(JFFS2 LZO compression support)、(JFFS2 RTIME compression support) 和 (JFFS2 RUBIN compression support)。默认的压缩格式定义在下面的选项中(JFFS2 default compression mode)。

JFFS2的继任者也被Linux内核支持(UBIFS file system support)。无排序块图像文件系统(Unsorted Block Image File System (UBIFS)) 同样与LogFS竞争。

Linux内核同样支持LogFS(LogFS file system)。

基于ROM的嵌入式系统需要CramFS的支持(Compressed ROM file system support (cramfs))。

此外,嵌入式系统可以使用SquashFS,这是一种只读压缩文件系统(SquashFS 4.0 - Squashed file system support)。Linux内核也支持SquashFS的扩展属性(Squashfs XATTR support)。

SquashFS支持三种不同的压缩格式 (Include support for ZLIB compressed file systems)、(Include support for LZO compressed file systems) 和 (Include support for XZ compressed file systems)。SquashFS的块大小可以设置为4KB (Use 4K device block size?)。同样,可以设置缓存大小(Additional option for memory-constrained systems)。

Linux内核支持 FreeVxFS (FreeVxFS file system support (VERITAS VxFS(TM) compatible))、 Minix (Minix file system support)、 MPEG filesystem (SonicBlue Optimized MPEG File System support)、 HPFS (OS/2 HPFS file system support)、 QNX4 (QNX4 file system support (read only))、 QNX6 (QNX6 file system support (read only)) 和 ROM 文件系统 (ROM file system support)。 http://www.linux.org/threads/qnx-file-systems.4577/andhttp://www.linux.org/threads/minix-mini-unix-file-system.4545/

"RomFS backing stores (Block device-backed ROM file system support)"提供了ROMfs不同额外的属性和能力的列表。

"Persistent store support"驱动提供对pstore文件系统的支持,这允许访问平台级的持久性存储。

pstore文件系统可以存储内核日志/消息(Log kernel console messages)。

当内核崩溃时(相当于Windows中的蓝屏死机),"Log panic/oops to a RAM buffer"会在RAM中存储日志。

下面一个驱动提供对Xenix、 Coherent、Version 7 和 System V 文件系统的支持(System V/Xenix/V7/Coherent file system support)。

Linux内核同样支持UFS(UFS file system support (read only))、 (UFS file system write support (DANGEROUS)) 和 (UFS debugging)。

内核也支持exofs(exofs: OSD based file system support)。

flash友好型文件系统(Flash-Friendly FileSystem)是一种对于闪存设备的特殊文件系统(F2FS filesystem support (EXPERIMENTAL))、 (F2FS Status Information )、 (F2FS extended attributes) 和 (F2FS Access Control Lists). http://www.linux.org/threads/flash-friendly-file-system-f2fs.4477/

下篇文章我们将配置网络文件系统。谢谢!


via: http://www.linux.org/threads/the-linux-kernel-configuring-the-kernel-part-20.4957/

译者:geekpi 校对:wxy

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

欢迎进入Linux内核系列文章的下一篇!我们正在接近配置过程的终点。在这篇文章中,我们将会讨论固件驱动和文件系统驱动。

这个分类中的第一个驱动是寻找启动盘(BIOS Enhanced Disk Drive calls determine boot disk)。有时,Linux不会知道哪个盘是启动盘。这个驱动允许内核询问BIOS。Linux接着在sysfs上存储信息。Linux需要知道这些来设置bootloader。

即使BIOS EDD服务被编译进了内核,这个选项可以设置这些服务不激活(Sets default behavior for EDD detection to off )。EDD代表的是"Enhanced Disk Drive"(增强磁盘驱动器)。

当使用kexec加载不同的内核时,性能可以通过固件提供的内存映射提升(Add firmware-provided memory map to sysfs)。

"Dell Systems Management Base Driver"通过sysfs接口提供了Linux内核对于Dell硬件的更好的控制。

启用这个驱动可以通过/sys/class/dmi/id/访问硬件的信息(Export DMI identification via sysfs to userspace)。DMI代表的是Desktop Management Interface(桌面管理接口)。DMI管理硬件的组件和访问硬件的数据。BIOS中数据的接口和硬件由SMBIOS(System Management BIOS)规范调节。

从DMI得到的原始数据表可以通过这个驱动访问(DMI table support in sysfs)。

为了从iSCSI驱动器中启动,启用这个驱动(DMI table support in sysfs)。

最后的驱动是一组"Google Firmware Drivers"。这些驱动用于Google特定的硬件。除非你为Google工作并且需要在硬件上使用Linux或者你在为一台从Google偷来的电脑编译内核,否则不要启用它。

下面,我们可以配置内核的文件系统支持。

"Second extended fs support"驱动用于EXT2文件系统。http://www.linux.org/threads/ext-file-system.4365/

"Ext2 extended attributes"提供了原生文件系统不支持的额外的元数据的使用。

"Ext2 POSIX Access Control Lists"增加了额外的非原生的权限模型。

"Ext2 Security Labels"增强了由SELinux提供的安全性。

启用"Ext2 execute in place support"允许可执行文件在当前的位置执行而不必在页缓存中执行。

这个驱动提供EXT3文件系统(Ext3 journaling file system support)。 http://www.linux.org/threads/ext-file-system.4365/

"Default to 'data=ordered' in ext3"驱动设置数据的排序模式为"Ordered"。这种处理方式为日志和写入工作。数据排序在这篇文章中解释 - http://www.linux.org/threads/journal-file-system.4136/

"Ext3 extended attributes"提供了原生文件系统不支持的额外的元数据使用。再说一次,接下来的EXT3的驱动/特性与EXT2相同 - "Ext3 POSIX Access Control Lists" 和 "Ext3 Security Labels"。同样,对接下来的EXT4也是相同的 - "Ext4 POSIX Access Control Lists"、"Ext4 Security Labels" 和 "EXT4 debugging support"。

EXT3和EXT4支持日志块设备调试(JBD debugging support),(JBD2 debugging support)。

下面的驱动提供Reiser文件系统支持(Reiserfs support)。 http://www.linux.org/threads/reiser-file-system-reiser3-and-reiser4.4403/

Reiser文件系统也有调试(Enable reiserfs debug mode)。

内核可以存储ReiserFS统计在/proc/fs/reiserfs (Stats in /proc/fs/reiserfs)。

下面的Reiser驱动/特性与EXT2/3/4相同 - ReiserFS extended attributes", "ReiserFS POSIX Access Control Lists" 和 "ReiserFS Security Labels".

Linux内核同样支持JFS,同时也包含了不同的特性 "JFS filesystem support"、 "JFS POSIX Access Control Lists"、"JFS Security Labels"、"JFS debugging" 和 "JFS statistics". http://www.linux.org/threads/journaled-file-system-jfs.4404/

再说一次,XFS可以通过启用这些驱动/特性支持 - "XFS filesystem support"、"XFS Quota support"、"XFS POSIX ACL support"、"XFS Realtime subvolume support" 和 "XFS Debugging support"。 http://www.linux.org/threads/xfs-file-system.4364/

"Global FileSystem 2"可以被内核支持(GFS2 file system support)。这个文件系统用于在集群中共享存储。

"GFS2 DLM locking"驱动提供了GFS2的分布式锁管理(DLM)

"Oracle Cluster FileSystem 2"被内核支持(OCFS2 file system support)。这个文件系统用于在集群中共享存储。

"O2CB Kernelspace Clustering"提供了OCFS2文件系统的不同服务。

"OCFS2 Userspace Clustering"允许集群栈在用户空间执行。

"OCFS2 statistics"驱动允许用户得到关于文件系统的统计信息。

像大多树Linux内核一样,OCFS2提供日志(OCFS2 logging support)。这可能被用来监视错误或者调试目的。

"OCFS2 expensive checks"驱动以性能为代价提供了存储一致性检测。一些Linux用户建议只有在调试目的在才启用它。

Linux内核同样包含了新的B树文件系统;这个驱动提供了磁盘格式化程序(Btrfs filesystem Unstable disk format)。BTRFS仍在开发中并被计划某天变的比EXT4更流行。http://www.linux.org/threads/b-tree-file-system-btrfs.4430/

"Btrfs POSIX Access Control Lists"提供了额外的原生BTRFS没有提供的权限模型。

下面,是一个BTRFS检测工具(Btrfs with integrity check tool compiled in (DANGEROUS))。由于BTRFS是一个最新在开发中的文件系统,大多数相关软件还并不稳定。

Linux系统也支持NIL-FileSystem(NILFS2 file system support)。http://www.linux.org/threads/new-implementation-of-a-log-structured-file-system-nilfs.4547/

为了支持一些文件系统使用到的flock()系统调用,启用这个驱动(Enable POSIX file locking API)。禁用这个去的那个会减少11KB的内核大小。这个驱动提供了文件锁定。文件锁定是一个允许进程在某刻读取文件的过程。这通常用于网络文件系统,就像NFS。

"Dnotify support"驱动是一个古老的文件系统通知系统,它提醒文件系统上的事件的用户空间。它和它的继承者被用于监控应用的文件系统。某个应用告诉守护进程需要监视哪些事件。不然,每个用户空间应用需要它们自己完成这个任务。

记住,Dnotify是一个古老的系统,那么什么是新的通知系统?它就是由这个驱动提供的Inotify (Inotify support for userspace)。

一个可选的通知系统是fanotify (Filesystem wide access notification)。Fanotify与Inotify一样,但是fanotify比Inotify传递更多的信息到用户空间中。

用这个驱动Fanotify可以检测权限(fanotify permissions checking)。

对于用户想要划分存储空间的系统需要 "Quota support"。 http://www.linux.org/threads/atomic-disk-quotas.4277/

接下来的驱动允许通过netlink报告磁盘配额警告和信息(Report quota messages through netlink interface)。netlink是一个用于与内核通信的用户空间的套接字接口。

配额信息同样可以发送到控制台(Print quota warnings to console (OBSOLETE))。

这个驱动允许配额系统执行额外的完整性检查(Additional quota sanity checks)。在计算机技术中,完整性检查是检测由于不良编程导致的错误。文件和输出都被检查来确保数据正确而不是以奇怪的方式构造。

一些旧的系统使用老的配额系统但希望在升级新内核时保留旧的配额系统。可以通过启用这个来容易解决(Old quota format support)。许多读者可能想要知道为什么一些人想要保留旧的配额系统而不是更新新的。好的,想想一下你是一家很大公司的IT部门的经理,公司有许多服务器运行着非常重要的任务。当你可以继续使用现在工作的很好的系统,你想要创建并配置一个新的(也可能很大)的文件系统么? 通常上,对于计算机,坚持下面的原则 - 如果它没有坏或者不会导致安全问题,不要去修复它。

用这个驱动,新的配额系统支持32位UID和GID(Quota format vfsv0 and vfsv1 support)。

为了自动挂载远程存储单元,启用这个驱动(Kernel automounter version 4 support)。

这个驱动支持FUSE文件系统(FUSE (Filesystem in Userspace) support)。用户空间文件系统(FUSE)支持任何用户创建他们自己的文件系统并在用户空间内使用。

一个特殊的FUSE扩展可以用于在用户空间使用字符设备Character device in Userspace support)。

下一篇文章中,我们会继续讨论缓存,光盘文件系统,Linux上的FAT32和其他有趣的文件系统话题。谢谢!


via: http://www.linux.org/threads/the-linux-kernel-configuring-the-kernel-part-19.4929/

译者:geekpi 校对:wxy

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

上篇教程里,我们为一个测试域exmample.tst创建了一个主域名服务器(ns1)。在本篇中,我们会在CentOS中使用bind包为相同的域创建一个辅域名服务器(ns2)。

当创建一个辅DNS服务器的时候,下面的因素需要仔细考虑。

  • 在辅域名服务器中,你不需要手动创建正向和反向区域文件。这些区域文件会定期从主域名服务器上面同步。
  • 当主域名服务器上的任何区域文件被修改的时候,'serial'参数也应当被更新。只有当主服务器上面区域文件的serial被修改之后,辅DNS服务器才会进行同步。

我们假设辅DNS服务器的IP地址是172.16.1.4。让我们来进行安装。

设置主机名

就像主域名服务器一样,辅域名服务器的主机名也应当是一个完全限定域名(FQDN)。

# vim /etc/sysconfig/network

HOSTNAME=ns2.example.tst

注意,在该文件中设置的主机名在服务器启动的时候会被使用。因此,如果你在系统启动之后修改该文件,修改结果不会立刻生效。下面的命令可以用来在系统运行的时候修改并及时生效。

# hostname ns2.example.tst

设置之后,可以用下面的命令来查看主机名称。

# hostname

ns2.example.tst

在进行下面的步骤之前,确保所有三台服务器的主机名称已经被正确设置。

安装软件包

就像主服务器一样,配置一台辅域名服务器可以使用chroot或者不用。必须的软件包可以使用yum轻松安装。

不使用 chroot:

# yum install bind

使用 chroot:

# yum install bind-chroot

为区域文件的传输准备配置文件

在CentOS中使用bind创建域名服务器后,默认设置允许所有的区域文件被任意服务器同步。安全起见,我们需要配置主域名服务器,只允许它允许辅域名服务器进行同步。

1. 主域名服务器

不使用chroot:

# vim /etc/named.conf

使用chroot:

# vim /var/named/chroot/etc/named.conf

zone "example.tst" IN {
    type master;
    file "example-fz"; ## 文件example-fz在主域名服务器上 ##
    allow-update { none; };
    allow-transfer {172.16.1.4; }; ## 允许辅域名服务器进行传输 ##
};

zone "1.16.172.in-addr.arpa" IN {
    type master;
    file "rz-172-16-1"; ##文件rz-172-16-1在主域名服务器上##
    allow-update { none; };
    allow-transfer {172.16.1.4; }; ## 允许辅域名服务器进行传输 ##
};

2. 辅域名服务器

软件安装后提供的默认配置文件就可以用来配置辅域名服务器。但是,我们使用会使用另外一个实例配置文件来进行配置,因为这样便于调整。

不使用chroot:

# cp /usr/share/doc/bind-9.8.2/sample/etc/named.rfc1912.zones /etc/named.conf

使用chroot:

# cp /usr/share/doc/bind-9.8.2/sample/etc/named.rfc1912.zones /var/named/chroot/etc/named.conf

当执行完上面的命令进行文件拷贝后,添加下面的内容到刚才那个拷贝后的文件中。

options {
        directory "/var/named";
        forwarders {8.8.8.8; };

};

zone "example.tst" IN {
        type slave;  ## 该主机为辅域名服务器 ##
        file "example-fz"; ## 这个文件会被自动创建 ##
        //allow-update { none; };
        allow-transfer {172.16.1.3; };  ## 定义必要时进行从其传输的主域名服务器 ##
        masters {172.16.1.3; }; ## 定义主域名服务器 ##
};

zone "1.16.172.in-addr.arpa" IN {
        type slave; ## 该主机被定义为辅域名服务器 ##
        file "rz-172-16-1"; ## 这个文件会被自动创建 ##
//      allow-update { none; };
        allow-transfer {172.16.1.3; };  ## 定义主域名服务器 ##
        masters {172.16.1.3; };
};

结束工作

为了确保没有权限相关的问题,我们需要做如下调整。

不使用chroot:

chmod 770 /var/named/

使用chroot,你需在named服务启动后按照下面的命令修改权限。

# chmod 770 /var/named/chroot/var/named

现在万事俱备,我们可以重启named服务。或者,确保named服务已经被加到了开始列表中。

# service named restart
# chkconfig named on

如果不出意外,辅域名服务器应该会向主域名服务器请求一个区域的传输,并且产生自己的/var/named目录。日志文件/var/log/messages会包含一些named服务的有用信息,包括区域文件传输过程中的信息。

测试一个辅域名服务器

我们可以使用dig或者nslookup进行DNS测试操作。在本篇教程中我们会使用nslookup来进行演示。必要的软件包可以通过yum进行安装。

# yum install bind-utils
# nslookup

> server 172.16.1.4
Default server:     172.16.1.4
Address:            172.16.1.4#53

> example.tst
Server:             172.16.1.4
Address:    172.16.1.4#53

Name:       example.tst
Address:    172.16.1.3

> set type=mx
> example.tst
Server:             172.16.1.4
Address:            172.16.1.4#53

example.tst         mail exchanger = 10 mail.example.tst.

> exit

排错提示

  1. 我们无需在辅域名服务器上创建任何区域文件。所有的区域文件都会与主域名服务器进行同步。
  2. 辅域名服务器上的named服务会定期与主服务器进行同步。如果你想来一次及时的同步,可以使用命令"rncd retransfer "。如下:
# rndc retransfer example.tst
  1. 只有当主服务器上区域文件的serial数字被修改变大的时候,辅域名服务器才会进行更新。
  2. 确保用户named可以对文件夹/var/named或者/var/named/chroot/var/named(使用chroot的情况下)进行写操作。
  3. /var/log/messages会包含有用的信息。
  4. 我已经将SELinux关闭了。
  5. 确保防火墙对UDP53端口开放。

希望这个可以帮到你。


via: http://xmodulo.com/2014/04/secondary-dns-server-centos.html

译者:zzlyzq 校对:wxy

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

任何运作中的域名至少有两台DNS服务器,一台称为主域名服务器(比如叫做ns1),而另一台称为从域名服务器(比如叫做ns2)。这些服务器通常用于故障转移:如果一台宕机,另外一台就激活成为DNS服务器(译注:此处译者有不同意见,事实上两个或更多的DNS服务器是共同工作的,并不是第一台停止服务后,第二台才接替工作。解析器是随机选择一个DNS服务器进行询问,如果超时则会询问下一个,这是多个DNS的故障容错机制)。也可以实现包括负载均衡、防火墙和集群在内的更为复杂的故障转移机制。

一个域的所有DNS条目都会被添加到主域名服务器,从服务器只会根据主服务器上的SOA记录的序列号参数从主服务器同步所有信息。

此教程将会讲述如何创建一台在CentOS上运行的主DNS服务器。请注意,本教程中提到的DNS服务器将会是一台开放DNS服务器,这也就是说该服务器将会回应来自任何IP地址的查询。对于DNS服务器的访问控制将在此教程中讨论(译注:开放的DNS服务器是一个安全隐患)。

在开始之前,我想要提一下的是,DNS可以在chroot环境中配置,也可以在非chroot环境中配置。chroot环境将DNS服务器限制在系统中某个特定目录中,以避免让服务器具有系统级的访问权限。在此环境中,任何DNS服务器的安全漏洞不会导致整个系统的破坏。将DNS服务器置于chroot环境中,对于部署测试也很有用。

目标

我们将在基于域名example.tst的测试环境中配置一台DNS服务器,这个域名是虚假的(并不真实存在的)。这样,我们就不会意外干扰到其它真实的域名。

在该域中,有以下三台服务器。

服务器IP地址托管的服务完全限定域名(FQDN)
Server A172.16.1.1Mailmail.example.tst
Server B172.16.1.2Web, FTPwww.example.tstftp.example.tst
Server C172.16.1.3Primary DNS serverns1.example.tst

我们将会配置一台主域名服务器,并添加上表中必要的域和DNS记录。

设置主机名

所有的主机名必须以完全限定域名的方式正确定义,可以通过以下方法完成设置。

# vim /etc/sysconfig/network 

HOSTNAME=ns1.example.tst

注:该文件中指定的主机名参数在服务器启动后才会启用(译注:或者网络服务重启后),因此,该设置不会马上生效。下面的命令可以立刻临时性地修改主机名。

# hostname ns1.example.tst 

一旦设置,主机名可以通过以下命令验证。

# hostname   
ns1.example.tst

在进入下一步之前,请确保上述三台服务器上的主机名已经设置正确。

安装软件包

我们将使用bind来配置DNS服务,该软件可以很方便地通过yum来安装。

不使用chroot环境的:

# yum install bind bind-chroot 

使用chroot环境的:

# yum install bind bind-chroot 

准备配置文件

正如前面提到的,bind可以在chroot环境下配置,或者在非chroot环境下配置,配置文件的路径会因为是否安装chroot包而不同。

配置文件路径区域文件路径
不带有 chroot/etc//var/named/
带有 chroot/var/named/chroot/etc//var/named/chroot/var/named/

可以使用默认提供的named.conf配置文件,但是为了更方便使用,我们将使用另外一个简单的配置文件模板。

非chroot环境:

# cp /usr/share/doc/bind-9.8.2/sample/etc/named.rfc1912.zones /etc/named.conf

chroot环境:

# cp /usr/share/doc/bind-9.8.2/sample/etc/named.rfc1912.zones /var/named/chroot/etc/named.conf

现在来备份并修改配置文件。

非chroot环境:

# vim /etc/named.conf 

chroot环境:

# vim /var/named/chroot/etc/named.conf 

添加/修改以下行:

options {
## 区域文件存放目录 ##
directory "/var/named";

## 对于非本地权威域的请求转发到 Google 的公开 DNS 服务器 ##
forwarders { 8.8.8.8; };
};

## 申明一个本地域 example.tst ##
zone "example.tst" IN {
        type master;
        file "example-fz"; ## 存储文件名,放在 /var/named ##
        allow-update { none; };
};

## 为IP段 172.16.1.0 提供反向解析 ##
zone "1.16.172.in-addr.arpa" IN {
        type master;
        file "rz-172-16-1"; ## 存储文件名,放在 /var/named ##
        allow-update { none; };
};

准备区域文件

那些默认的区域文件会自动创建到/var/named 或者/var/named/chroot/var/named (chroot环境)。如果在这些地方找不到这些文件,/usr/share/doc/bind目录中提供了模板文件,可以从这里拷贝。

假设默认区域文件没有提供,我们可以从/usr拷贝模板文件。

非chroot环境:

# cp /usr/share/doc/bind-9.8.2/sample/var/named/named.* /var/named/

chroot环境:

# cp /usr/share/doc/bind-9.8.2/sample/var/named/named.* /var/named/chroot/var/named

很好!由于现在默认的区域文件已经准备好,我们可以为example.tst和172.16.1.0网络创建区域文件了,以下要点必须时刻谨记。

  • 区域文件中的特殊字符‘@’意味着空。(译注:意即代表本域。)
  • 所有的完全限定域名必须以点‘.’结束。如:example.tst.如果没有这个点,你会发生问题。(译注:即会被当做当前@所代表的域的子域。)

1. 转发区域(本地权威域)

转发区域包含了名称到IP地址的映射。对于公开的域,域名托管提供商的DNS服务器存储了转发区域文件。(译注:转发区域即本地的权威域,由这个服务器自身提供权威的解析数据)

非chroot环境:

# vim /var/named/example-fz 

chroot环境:

# vim /var/named/chroot/var/named/example-fz 

$TTL 1D
@       IN SOA  ns1.example.tst. sarmed.example.tst. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
IN NS      ns1.example.tst.
IN A       172.16.1.3
mail        IN A        172.16.1.1
        IN MX 10    mail.example.tst.
www     IN A        172.16.1.2
ns1     IN A        172.16.1.3
ftp     IN CNAME    www.example.tst.

说明:在区域文件中,SOA是开始授权(Start Of Authority)的意思。它的值的第一段是授权名称服务器的完全限定域名。完全限定域名后面跟着的是电子邮件地址。由于不能在[email protected]这样的格式中使用‘@’符号(译注:@有特定意义,代表本域。),我们将电子邮件地址重写成sarmed.example.tst.这样的格式。

以下是典型的常用DNS记录类型:

  • NS:域名服务器
  • A: 地址记录,记录主机名到IP地址的映射(译注,此处原文有误。)
  • MX: 邮件交换记录。这里我们只用了一个邮件交换记录,设置其优先级为10。如果有多个邮件交换记录,我们可以使用多个数值优先级,数字小的优先级最高。例如,MX 0比MX 1优先级更高。
  • CNAME: 标准名。如果在一台单一服务器上托管了多个服务,也很可能将多个名称解析到某个单一服务器。CNAME指定了一台服务器可能有的其它名称,并且将它们指向具有实际A记录的名称。

2. 反向区域

反向区域包含了IP地址到名称的映射。这里,我们为172.16.1.0网络创建反向区域。在正式的域中,公共IP区块的拥有者拥有的DNS服务器存储反向区域文件。(某些服务,如邮件服务,要求IP地址具备正确的反向解析才能正常工作。而IP的反向解析,通常是由IP的拥有者如接入商或IDC来负责解析。)

非chroot环境:

# vim /var/named/rz-172-16-1 

chroot环境:

# vim /var/named/chroot/var/named/rz-172-16-1 

$TTL 1D
@       IN SOA  ns1.example.tst. sarmed.example.tst. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
IN NS      ns1.example.tst.
1       IN PTR  mail.example.tst.
2       IN PTR  www.example.tst.
3       IN PTR  ns1.example.tst.

说明:除了下面的参数外,反向区域文件中的大多数参数和转发区域文件中的相同。

  • PTR: IP反向解析记录,指向一个反向限定域名。

结束工作

既然区域文件已经准备好,我们接下来调整它们的权限。

非chroot环境:

# chgrp named /var/named/* 

chroot环境:

# chgrp named /var/named/chroot/var/named/* 

现在,我们为DNS服务器设置IP地址。

# vim /etc/resolv.conf 

nameserver 172.16.1.3

最后,我们可以启动DNS服务,并确保将它添加到启动服务中。

# service named restart
# chkconfig named on 

DNS服务器起动后,建议关注一下日志文件/var/log/messages,这里头包含了后台运行的一些有用信息。如果没有发现错误,我们可以开始测试DNS服务器。

测试DNS

我们可以使用dig或者nslookup来测试DNS。首先,我们需要安装必要的软件包。

# yum install bind-utils 

1. 使用dig测试转发区域

使用dig来测试时,必须时刻关注状态信息:“NOERROR”,任何其它值都表明存在问题。

# dig example.tst 

;; ->>HEADER<<- opcode: QUERY,  status: NOERROR, id: 31184

;; QUESTION SECTION:
;example.com.                   IN      A

;; ANSWER SECTION:
example.com.            86400   IN      A       172.16.1.3

;; AUTHORITY SECTION:
example.com.            86400   IN      NS      ns1.example.com.

;; ADDITIONAL SECTION:
ns1.example.com.        86400   IN      A       172.16.1.3

2. 使用dig测试PTR记录

使用dig来测试时,必须时刻关注状态信息:“NOERROR”,任何其它值都表明存在问题。(译注,也可用 dig 1.1.16.172.in-addr.arpa. ptr 来测试。)

# dig -x 172.16.1.1 

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27415

;; QUESTION SECTION:
;1.1.17.172.in-addr.arpa.       IN      PTR

;; ANSWER SECTION:
1.1.16.172.in-addr.arpa. 86400  IN      PTR     mail.example.tst.

;; AUTHORITY SECTION:
1.16.172.in-addr.arpa.  86400   IN      NS      ns1.example.tst.

;; ADDITIONAL SECTION:
ns1.example.tst.        86400   IN      A       172.16.1.3

3. 使用dig测试MX记录

# dig example.tst mx 

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35405

;; QUESTION SECTION:
;example.tst.                        IN      MX

;; ANSWER SECTION:
example.tst.         14366   IN      MX     10  mail.example.tst.

排错提示

  1. 我已经把SELinux关闭。
  2. 保证防火墙没有阻挡UDP 53端口
  3. 万一出错,可在/var/log/messages中查看到有用的信息
  4. 确保区域文件的属主为‘named’
  5. 确保DNS服务器的IP地址是/etc/resolv.conf中的第一条目
  6. 如果你使用example.tst作为实验环境,确保将服务器从互联网断开,因为example.tst是一个不存在的域。

最后小结,该教程关注的是实验环境中配置example.tst域用作为演示。请注意,该教程中创建了一台公共DNS服务器,此服务器会回应来自任何源IP地址的查询。如果你是在配置DNS生产服务器,请确保检查与公共DNS相关的策略。其它教程涵盖了创建从DNS服务器, 限制对DNS服务器的访问以及部署DNSSEC。

希望此教程对您有所帮助。


via: http://xmodulo.com/2014/04/primary-dns-server-using-centos.html

译者:GOLinux 校对:wxy

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

Current Unity 7 desktop in Ubuntu 14.04 LTS

Ubuntu 的开发者提出将开发一个单独使用 Unity 8的新风格,以帮助他们自由的实验而不必担心搞乱操作系统稳定。

如果你的环境满足安装需要的话,现在可以在Ubuntu 14.04 LTS中安装体验下 Unity 8 桌面环境的预览版了。现在,新的桌面还不能在专有驱动下运行,因为它依赖于 Mir,而这玩意儿还没有获得 NVIDIA 和 AMD 的官方支持。

无论如何,有一个新的 Ubuntu 风格对于开发者在新的生态环境中测试他们的创意都会有巨大的帮助,而且从 USB Stick 里启动十分方便还能体验大多数的移植性应用。

“桌面环境开发组很希望为 Ubuntu 增加一个新的风格(嘘~,我们并不是计划现在就发行一个正式的版本),这个风格将包括为触屏项目开发的Unity 8桌面和新的应用。最初的意图是提供一个产品使得开发人员可以在做一个基于该软件的桌面产品的时候可以估算出所需要的的工作量,并建立一个可以由实验来找出所需的最佳结合方式的空间。”

“我们仍将计划融合当前的桌面环境,但是我们不希望给用户带来不安稳和造成不便,而且希望并行的发展这个新风格可以使我们真正实现在软件已经准备就绪的时候再迁移,而不是迁移后再解决用户的原有软件的兼容问题。” Ubuntu 的开发者 Iain Lane说。

Ubuntu 14.04 LTS 现在默认使用 Unity 7,而且可能这至少将持续到下一个版本 Ubuntu 14.10。Ubuntu 开发者的目标是最迟在下一个 LTS:Ubuntu 16.04 中让 Unity 8 和 Mir 成为默认的配置,但是如果事情进展的顺利,我们可能会在此之前就能成功。

这个新风格的名字是什么还不清楚,但是如果地位确定的话,我们可能在接下来的几个月就可以得到ISO文件。这将会使得用户更容易地测试 Unity 8 ,而且可以在它成为默认配置之前体验一把。

当 Canonical 用 Unity 替换旧的 GNOME 2 的时候,这个转换引起的震动是如此之大,以至于直到今天在论坛中还时不时的被人提及。有一个专门的 Unity 8 风格可能会缓解这个问题。


via: http://news.softpedia.com/news/Ubuntu-Developers-Propose-a-New-Flavor-Based-Only-on-Unity-8-442262.shtml

译者:crowner 校对:wxy

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