Skip to content Skip to main navigation Skip to footer

Linux

Linux:RHEL 7特性说明(五):虚拟化

Red Hat Enterprise Linux 7.0 是 Red Hat 的下一代操作系统完整套件,旨在用于关键任务企业级计算以及顶级企业级软件和硬件零售商认证。

Linux:RHEL 7特性说明(五):虚拟化
Linux:RHEL 7特性说明(五):虚拟化

基于内核的虚拟化

⁠使用 virtio-blk-data-plane 提高快 I/O性能

在 Red Hat Enterprise Linux 7.0 中,virtio-blk-data-plane I/O 虚拟化功能是作为技术预览使用。这个功能将 QEMU 扩展至在为 I/O 性能优化的专用线程中执行磁盘 I/O。

⁠PCI 桥接

之前 QEMU 最多可支持 32 个 PCI 插槽。Red Hat Enterprise Linux 7.0 采用 PCI 桥接技术,可让用户配置 32 个以上的 PCI 设备。注:不支持桥接后的设备热插拔。

⁠QEMU 沙箱

Red Hat Enterprise Linux 7.0 使用内核系统调用过滤加强 KVM 虚拟化安全性,这提高了主机系统与虚拟机之间的独立性。

⁠支持 QEMU 虚拟 CPU 热添加

Red Hat Enterprise Linux 7.0 中的 QEMU 提供虚拟 CPU(vCPU)热添加支持。可在运行的虚拟机中添加虚拟 CPU(vCPUS)以满足与负载关联的负载要求或者保持服务等级协议(SLA)。注:只在使用 pc-i440fx-rhel7.0.0 机器类型的虚拟机中支持 vCPU 热插拔,这是 Red Hat Enterprise Linux 7.0 中的默认机器类型。

⁠多队列 NIC

多队列 virtio_net 提供更好的可延伸性。每个虚拟 CPU 都有独立的传输或者接收队列以及可在不影响其他虚拟 CPU 的情况下使用的独立中断。

⁠多队列 virtio_scsi

多队列 virtio_net 提供更好的可延伸性。每个虚拟 CPU 都有独立的队列以及可在不影响其他虚拟 CPU 的情况下使用的独立中断。

⁠实时迁移的页面 Delta 压缩

已通过压缩虚拟机内存页并减小传输的迁移数据大小提高 KVM 实时迁移功能。这个功能可让迁移至集合更迅速。

KVM 中的 HyperV 启示

已使用多个微软 Hyper-V 功能更新了 KVM,例如:支持内存管理单元(MMU)和虚拟中断控制程序。微软在虚拟机和主机之间提供半虚拟 API,通过在主机中使用这个功能的一部分,并根据微软的说明对其进行控制,微软 Windows 虚拟机就可以提高其性能。

⁠高带宽 I/O的 EOI 加速

Red Hat Enterprise Linux 7.0 在高级可编程中断控制程序(APIC)中使用 Intel 和 AMD 的改进加速中断结束(EOI)处理。对于老的芯片组来说,Red Hat Enterprise Linux 7.0 为 EOI 加速提供了半虚拟化选项。

⁠KVM 虚拟机的 USB 3.0 支持

Red Hat Enterprise Linux 7.0 通过添加 USB 3.0 主机适配器(xHCI)模拟作为技术预览提供改进的 USB 支持。

⁠Windows 8 和 Windows Server 2012 虚拟机支持

Red Hat Enterprise Linux 7.0 支持在 KVM 虚拟机中运行的微软 Windows 8 和 Windows Server 2012 虚拟机。

⁠QEMU 虚拟机的 I/O 节流

这个功能为 QEMU 虚拟机块设备提供 I/O节流。I/O 节流会延缓 I/O 内存请求的处理。这样会延迟系统但可防止其死机。注:不能节流数据层。

⁠整合膨胀和透明大页面

Red Hat Enterprise Linux 7.0 更好地整合了膨胀和透明大页面。可移除并压缩膨胀页面使其成为大页面。

⁠从主机中提取系统熵

可为虚拟机配置一个新设备 virtio-rng,它可让虚拟机使用主机的熵。默认情况下,这个信息来自主机的 /dev/random 文件,但主机中可用的硬件随机号码生成程序(RNG)也可作为来源使用。

⁠桥接零复制传输(Bridge Zero Copy Transmit)

桥接零复制传输是提高 CPU 处理大量信息的性能特点。这个桥接零复制传输功能提高了虚拟机在使用桥接时的外出流量性能。

⁠实时迁移支持

支持从 Red Hat Enterprise Linux 6.5 主机到 Red Hat Enterprise Linux 7.0 主机的实时迁移。

qemu-kvm 中的丢弃支持

在域的 XML 定义的  元素中添加 discard=’unmap’ 后,就可以在虚拟机中使用 fstrim 或者 mount -o discard 命令的丢弃支持。例如:


	
  
  ...

⁠NVIDIA GPU 设备分配

Red Hat Enterprise Linux 7.0 支持 NVIDA 专业系列显示设备(GRID 和 Quadro)的设备分配作为模拟 VGA 的第二图形设备。

⁠半虚拟 Ticketlock

Red Hat Enterprise Linux 7.0 支持半虚拟 ticketlocks(pvticketlocks)以提高在过度使用 CPU 的 Red Hat Enterprise Linux 7.0 主机中运行的 Red Hat Enterprise Linux 7.0 虚拟机性能。

⁠处理分配的 PCIe 设备出错

如果在将使用高级出错报告(Advanced Error Reporting,AER)的 PCIe 分配给虚拟机时出错,则受到影响的虚拟机会关机,但不影响其他正在运行的虚拟机或者主机。该设备的主机驱动程序从错误中恢复后就可以让该虚拟机重新运行。

⁠Q35 芯片组,PCI 快速总线以及 AHCI 总线模拟

Q35 机型需要 KVM 虚拟机中的 PCI 快速总线支持,它是作为技术预览在 Red Hat Enterprise Linux 7.0 中提供。包含 AHCI 总线也只能在 Q35 机型中使用,同样也是技术预览。

⁠基于 VFIO 的 PCI 设备分配

虚拟功能 I/O(VFIO)用户空间驱动程序界面为 KVM 虚拟机提供改进的 PCI 设备分配解决方案。VFIO 提供内核级设备分离强化,提高设备访问的安全性,并与安全引导等功能兼容。VFIO 替换了 Red Hat Enterprise Linux 6 中使用的 KVM 设备分配机制。

⁠Intel VT-d 大页面

在 Red Hat Enterprise Linux 7.0 的 KVM 虚拟机中使用虚拟功能 I/O(VFIO)设备分配时,使用 2MB 页面作为输入/输出内存管理单位(IOMMU),因此可减少 I/O 操作的转译后备缓存(translation lookaside buffer ,TLB)的消耗。计划在 Red Hat Enterprise Linux 7.0 中提供 1GB 页面支持。VT-d 大页面功能支持目前仅限于 Intel 的平台。

⁠KVM 时钟获取时间性能

在 Red Hat Enterprise Linux 7.0 中加强了 vsyscall 机制以支持 KVM 虚拟机更迅速地从用户控件读取时钟。Red Hat Enterprise Linux 7.0 主机中运行的 Red Hat Enterprise Linux 7.0 虚拟机可体验到经常读取时间的应用程序的性能提高。

⁠图像格式的 QCOW2 版本 3

Red Hat Enterprise Linux 7.0 添加对图像格式的 QCOW2 版本 3 的支持

⁠改进的实时迁移统计

现在可使用实时迁移的有关信息分析和调试性能。改进的统计包括预期关机、关机或者脏页面比例。

⁠实时迁移线程

已将 KVM 实时迁移功能改进为支持线程处理。

⁠字符设备和串行端口的热插拔

目前 Red Hat Enterprise Linux 7.0 支持为新字符设备热插拔新串行端口。

⁠模拟 AMD Opteron G5

KVM 现在可以模拟 AMD Opteron G5 处理器。

⁠在 KVM 虚拟机中支持新的 Intel 指令

KVM 虚拟机可以使用 Intel 22nm 处理器支持的新指令。这些包括:

  • 浮点乘加器,
  • 256 位整数向量,
  • 大端移动指令(MOVBE)支持,
  • 或者 HLE/HLE+。

⁠VPC 和 VHDX 文件格式

Red Hat Enterprise Linux 7.0 中的 KVM 包括对微软虚拟 PC(VPC)和微软 Hyper-V 虚拟硬盘(VHDX)文件格式的支持。

libguestfs 新功能

libguestfs 是一组访问和修改虚拟机磁盘映像的工具。Red Hat Enterprise Linux 7.0 中的libguestfs 包括大量改进,最主要的包括:

  • 使用 SELinux 或者 sVirt 包含的安全虚拟化,保证加强针对恶意和畸形磁盘映像的安全性。
  • 可检查和修改远程磁盘,最开始是使用网络块设备(NBD)。
  • 在某些程序中可进行磁盘热插拔以便获得更好的性能。

⁠WHQL 认证的 virtio-win 驱动程序

Red Hat Enterprise Linux 7.0 包括用于最新微软 Windows 虚拟机,即 Microsoft Window 8, 8.1, 2012 和 2012 R2 的 Windows 硬件质量实验室(WHQL)认证的 virtio-win 驱动程序。

Xen

⁠Red Hat Enterprise Linux 7.0 Xen HVM 虚拟机

用户现在可以在广受欢迎的 Xen 环境中使用 Red Hat Enterprise Linux 7.0 作为虚拟机。

Hyper-V

⁠Red Hat Enterprise Linux 7.0 托管的第二代虚拟机

Red Hat Enterprise Linux 7.0 可作为 Microsoft Hyper-V Server 2012 R2 主机中的第二代虚拟机。除上一代虚拟机支持的功能外,第二代提供了虚拟机中的新功能,例如:安全引导,使用 SCSI 虚拟硬盘引导或者 UEFI 固件支持。

 

本系列文章来自 RHEL 7.0 的发行注记,完整内容请移步:https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/7/html/7.0_Release_Notes/index.html 

来源:https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/7/html/7.0_Release_Notes/index.html

Linux:五个超赞的字符艺术生成器!

ASCII字符艺术

前两天有人在微博上传了一张Linux登录后的Motd图片,非常传神的体现了系统管理员们无厘头和无奈的一面。

Linux:五个超赞的字符艺术生成器!
Linux:五个超赞的字符艺术生成器!
其实这副图片就是通过人们称为ASCII字符艺术的方法生成的,完整的代码如下:

cat <_/___.' >'  "".
                    | | : '-  '.;' _ /';.'/ - ' : | |
                       '_.   _ __ /__ _/   .-' /  /
                ====='-.____'.___ _____/___.-'____.-'=====
                                  '=---='
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                        佛祖保佑    iii    永不死机
EOT

 
(图片和字符来自:http://www.stenote.com/)
ASCII是一个非常吸引人的字符编码系统,在计算机,通讯设备,以及其他设备中,通过它来用代码表示字符。新生代的人可能会觉得它已经过时了,但是那些熟悉它的人会懂得ASCII是多么的独特。我们在这里为你准备了五个超赞的ASCII字符艺术生成器。

Linux:五个超赞的字符艺术生成器!
Linux:五个超赞的字符艺术生成器!

1.GlassGiant ASCII Art

这个小程序可以把图片转换成ASCII字符艺术-一堆胡乱堆在一起的文字,数字和符号,看上去没有任何意义,直到你往后站一步去看完整的画面。它也没有什么实际的用途,只是看上去非常简洁灵巧。

2.ASCII Art Generator

ASCII字符艺术是一种在电脑上把可打印字符作为图片元素来拼接展现一幅图像的艺术活动。你所需要做的只是上传你的图片,然后它会帮你转成ASCII字符艺术。

3.Ascii.mastervb

ASCII字符艺术来源于7比特ASCII字符标准。ASCII字符艺术曾经在70-80年代很流行。在那个时候,计算机系统都还是基于字符的。这个程序可以非常快地把图片转换成ASCII字符。

4.IMG2TXT

这个脚本可以将GIF,JPG或PNG的链接转换成ASCII字符或是带颜色的HTML。

5.picascii

它可以把图片转换成ASCII文本或是HTML。要做转换,你只需要输入链接地址或是选择一张你电脑上的图片(gif/jpeg/png)。


via: http://www.efytimes.com/e1/fullnews.asp?edid=142480
译者:zpl1025 校对:wxy
本文由 LCTT 原创翻译,Linux中国 荣誉推出
来源:https://linux.cn/article-3405-1.html

Linux:RHEL 7特性说明(六):集群

Red Hat Enterprise Linux 7.0 是 Red Hat 的下一代操作系统完整套件,旨在用于关键任务企业级计算以及顶级企业级软件和硬件零售商认证。

Linux:RHEL 7特性说明(六):集群
Linux:RHEL 7特性说明(六):集群

集群是多台计算机(节点)一同工作以便提高重要产品服务的可靠性、可扩展性和可用性。可将使用 Red Hat Enterprise Linux 7.0 的高可用性根据性能、高可用性、负载平衡以及文件共享的不同需要采用各种不同的配置进行部署。注:Red Hat Enterprise Linux 7.0 负载平衡现在是基础 Red Hat Enterprise Linux 的一部分。

Pacemaker 集群管理器

Red Hat Enterprise Linux 7.0 使用 Pacemaker 替换 rgmanager 进行集群资源管理以及从节点失败中恢复。Pacemaker 的优点包括:

  • 资源配置的自动同步和版本管理。
  • 灵活的资源和 fencing 模式可与用户环境更紧密地对应。
  • 可使用 fencing 恢复资源层失败。
  • 基于时间的配置选项。
  • 在多节点中运行同一资源的能力。例如:网页服务器或者集群文件系统。
  • 在两个不同模式之一的多个节点中运行同一资源的能力。例如:同步资源和目标。
  • Pacemaker 不需要分布式锁管理程序。
  • 仲裁丢失或者形成多个分区时的可配置行为。

使用 keepalived 和 HAProxy 替换 Piranha

Red Hat Enterprise Linux 7.0 使用 keepalived 和 HAProxy 替换了负载平衡程序 Piranha。keepalived 软件包提供简单且强大的负载平衡和高可用功能。负载平衡框架依赖大家熟知且广泛使用的 Linux 虚拟服务器内核模块,提供四级网络负载平衡。keepalived 守护进程在负载平衡的服务器池中根据其状态采用一组状态检查程序。keepalived 守护进程还采用虚拟路由器冗余协议(VRRP),允许路由器或者管理器故障切换以便提供高可用性。HAProxy 为 TCP 和 HTTP 应用程序提供一个可靠的高性能网络负载平衡程序。它特别适用于在需要持久性或者 Layer7 处理时有非常高负载的网页。

高度可用性管理

Pacemaker 配置系统,也称 pcs,替换了 ccsricci 和 luci 作为统一的集群配置和管理工具。pcs 的优点包括:

  • 命令行工具。
  • 可轻松自我启动集群,即初始化集群并使其开始运行。
  • 可配置集群选项。
  • 可添加、删除或者修改资源及其之间的关系。

新的资源代理

Red Hat Enterprise Linux 7.0 提供大量资源代理。资源代理时集群资源的标准化接口。资源代理可将一组标准操作转换为具体资源或者应用程序的步骤,并将其结果解读为成功或者失败。

 

本系列文章来自 RHEL 7.0 的发行注记,完整内容请移步:https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/7/html/7.0_Release_Notes/index.html 

来源:https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/7/html/7.0_Release_Notes/index.html

Linux:VPN 隧道协议PPTP、L2TP、IPSec和SSLVPN的区别

VPN (虚拟专用网)发展至今已经不在是一个单纯的经过加密的访问隧道了,它已经融合了访问控制、传输管理、加密、路由选择、可用性管理等多种功能,并在全球的信息安全体系中发挥着重要的作用。也在网络上,有关各种VPN协议优缺点的比较是仁者见仁,智者见智,很多技术人员由于出于使用目的考虑,包括访问控制、 安全和用户简单易用,灵活扩展等各方面,权衡利弊,难以取舍;尤其在VOIP语音环境中,网络安全显得尤为重要,因此现在越来越多的网络电话和语音网关支持VPN协议。

Linux:VPN 隧道协议PPTP、L2TP、IPSec和SSLVPN的区别
Linux:VPN 隧道协议PPTP、L2TP、IPSec和SSLVPN的区别

PPTP

点对点隧道协议 (PPTP) 是由包括微软和3Com等公司组成的PPTP论坛开发的一种点对点隧道协,基于拨号使用的PPP协议使用PAP或CHAP之类的加密算法,或者使用Microsoft的点对点加密算法MPPE。其通过跨越基于 TCP/IP 的数据网络创建 VPN 实现了从远程客户端到专用企业服务器之间数据的安全传输。PPTP 支持通过公共网络(例如 Internet)建立按需的、多协议的、虚拟专用网络。PPTP 允许加密 IP 通讯,然后在要跨越公司 IP 网络或公共 IP 网络(如 Internet)发送的 IP 头中对其进行封装。

Linux:VPN 隧道协议PPTP、L2TP、IPSec和SSLVPN的区别
Linux:VPN 隧道协议PPTP、L2TP、IPSec和SSLVPN的区别

L2TP

第 2 层隧道协议 (L2TP) 是IETF基于L2F (Cisco的第二层转发协议)开发的PPTP的后续版本。是一种工业标准 Internet 隧道协议,其可以为跨越面向数据包的媒体发送点到点协议 (PPP) 框架提供封装。PPTP和L2TP都使用PPP协议对数据进行封装,然后添加附加包头用于数据在互联网络上的传输。PPTP只能在两端点间建立单一隧道。 L2TP支持在两端点间使用多隧道,用户可以针对不同的服务质量创建不同的隧道。L2TP可以提供隧道验证,而PPTP则不支持隧道验证。但是当L2TP 或PPTP与IPSEC共同使用时,可以由IPSEC提供隧道验证,不需要在第2层协议上验证隧道使用L2TP。 PPTP要求互联网络为IP网络。L2TP只要求隧道媒介提供面向数据包的点对点的连接,L2TP可以在IP(使用UDP),桢中继永久虚拟电路 (PVCs),X.25虚拟电路(VCs)或ATM VCs网络上使用。

Linux:VPN 隧道协议PPTP、L2TP、IPSec和SSLVPN的区别
Linux:VPN 隧道协议PPTP、L2TP、IPSec和SSLVPN的区别

IPSec

IPSec 的隧道是封装、路由与解封装的整个过程。隧道将原始数据包隐藏(或封装)在新的数据包内部。该新的数据包可能会有新的寻址与路由信息,从而使其能够通过网络传输。隧道与数据保密性结合使用时,在网络上窃听通讯的人将无法获取原始数据包数据(以及原始的源和目标)。封装的数据包到达目的地后,会删除封装,原始数据包头用于将数据包路由到最终目的地。

Linux:VPN 隧道协议PPTP、L2TP、IPSec和SSLVPN的区别
Linux:VPN 隧道协议PPTP、L2TP、IPSec和SSLVPN的区别

隧道本身是封装数据经过的逻辑数据路径,对原始的源和目的端,隧道是不可见的,而只能看到网络路径中的点对点连接。连接双方并不关心隧道起点和终点之间的任何路由器、交换机、代理服务器或其他安全网关。将隧道和数据保密性结合使用时,可用于提供VPN。

封装的数据包在网络中的隧道内部传输。在此示例中,该网络是 Internet。网关可以是外部 Internet 与专用网络间的周界网关。周界网关可以是路由器、防火墙、代理服务器或其他安全网关。另外,在专用网络内部可使用两个网关来保护网络中不信任的通讯。

当以隧道模式使用 IPSec 时,其只为 IP 通讯提供封装。使用 IPSec 隧道模式主要是为了与其他不支持 IPSec 上的 L2TP 或 PPTP VPN 隧道技术的路由器、网关或终端系统之间的相互操作。

SSLVPN

SSL协议提供了数据私密性、端点验证、信息完整性等特性。SSL协议由许多子协议组成,其中两个主要的子协议是握手协议和记录协议。握手协议允许服务器 和客户端在应用协议传输第一个数据字节以前,彼此确认,协商一种加密算法和密码钥匙。在数据传输期间,记录协议利用握手协议生成的密钥加密和解密后来交换 的数据。

Linux:VPN 隧道协议PPTP、L2TP、IPSec和SSLVPN的区别
Linux:VPN 隧道协议PPTP、L2TP、IPSec和SSLVPN的区别

SSL独立于应用,因此任何一个应用程序都可以享受它的安全性而不必理会执行细节。SSL置身于网络结构体系的传输层和应用层之间。此外,SSL本身就被几乎所有的Web浏览器支持。这意味着客户端不需要为了支持SSL连接安装额外的软件。这两个特征就是SSL能 应用于VPN的关键点。

OpenVPN

典型的SSL VPN应用如OpenVPN,是一个比较好的开源软件。PPTP主要为那些经常外出移动或家庭办公的用户考虑;而OpenVPN主要是针对企业异地两地总分公司之间的VPN不间断按需连接,例如ERP在企业中的应用。

OpenVPN 允许参与建立VPN的单点使用预设的私钥,第三方证书,或者用户名/密码来进行身份验证。它大量使用了OpenSSL加密库,以及SSLv3/TLSv1 协议。OpenVPN能在Linux、xBSD、Mac OS X与Windows 2000/XP上运行。它并不是一个基于Web的VPN软件,也不与IPsec及其他VPN软件包兼容。

隧道加密

OpenVPN使用OpenSSL库加密数据与控制信息:它使用了OpesSSL的加密以及验证功能,意味着,它能够使用任何OpenSSL支持的算法。它提供了可选的数据包HMAC功能以提高连接的安全性。此外,OpenSSL的硬件加速也能提高它的性能。

验证

OpenVPN提供了多种身份验证方式,用以确认参与连接双方的身份,包括:预享私钥,第三方证书以及用户名/密码组合。预享密钥最为简单,但同时它 只能用于建立点对点的VPN;基于PKI的第三方证书提供了最完善的功能,但是需要额外的精力去维护一个PKI证书体系。OpenVPN2.0后引入了用 户名/口令组合的身份验证方式,它可以省略客户端证书,但是仍有一份服务器证书需要被用作加密.

网络

OpenVPN所有的通信都基于一个单一的IP端口,默认且推荐使用UDP协议通讯,同时TCP也被支持。OpenVPN连接能通过大多数的代理服务 器,并且能够在NAT的环境中很好地工作。服务端具有向客户端“推送”某些网络配置信息的功能,这些信息包括:IP地址、路由设置等。OpenVPN提供 了两种虚拟网络接口:通用Tun/Tap驱动,通过它们,可以建立三层IP隧道,或者虚拟二层以太网,后者可以传送任何类型的二层以太网络数据。传送的数 据可通过LZO算法压缩。IANA(Internet Assigned Numbers Authority)指定给OpenVPN的官方端口为1194。OpenVPN 2.0以后版本每个进程可以同时管理数个并发的隧道。

OpenVPN使用通用网络协议(TCP与UDP)的特点使它成为IPsec等协议的理想替代,尤其是在ISP(Internet service provider)过滤某些特定VPN协议的情况下。在选择协议时候,需要注意2个加密隧道之间的网络状况,如有高延迟或者丢包较多的情况下,请选择 TCP协议作为底层协议,UDP协议由于存在无连接和重传机制,导致要隧道上层的协议进行重传,效率非常低下。

安全

OpenVPN与生俱来便具备了许多安全特性:它在用户空间运行,无须对内核及网络协议栈作修改;初始完毕后以chroot方式运行,放弃root权限;使用mlockall以防止敏感数据交换到磁盘。

OpenVPN通过PKCS#11支持硬件加密标识,如智能卡。

来源:https://www.x-berry.com/vpn-tunneling-protocol/

Linux:如何在Ubuntu下配置L2TP VPN

之前发布了一篇如何在Ubuntu下架设PPTP协议的VPN服务的文章,不过有些情况下,PPTP会受到影响而不能正常使用,那么你还有一种选择,就是使用L2TP/IPSec 的VPN。 

Linux:如何在Ubuntu下配置L2TP VPN
Linux:如何在Ubuntu下配置L2TP VPN

安装软件包

sudo apt-get install xl2tpd openswan ppp

IPSec / Openswan

打开 /etc/ipsec.conf 文件,做如下配置:

config setup
        nat_traversal=yes
        virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:!10.152.2.0/24
        # 这里包含的网络地址允许配置为远程客户端所在的子网。换句话说,
        # 这些地址范围应该是你的NAT路由器后面的客户端的地址。
        oe=off
        protostack=netkey
conn L2TP-PSK-NAT
        rightsubnet=vhost:%priv
        also=L2TP-PSK-noNAT
conn L2TP-PSK-noNAT
        authby=secret
        pfs=no
        auto=add
        keyingtries=3
        rekey=no
        # Apple 的 iOS 不会发送 delete 提醒,
        # 所以我们需要通过死亡对端(dead peer)检测来识别断掉的客户端
        dpddelay=30
        dpdtimeout=120
        dpdaction=clear
        # 设置 ikelifetime 和 keylife 和 Windows 的默认设置一致
        ikelifetime=8h
        keylife=1h
        type=transport
        # 替换 IP 地址为你的本地IP (一般是,私有地址、NAT内的地址)
        left=x.x.x.x
        # 用于升级过的 Windows 2000/XP 客户端
        leftprotoport=17/1701
        # 要支持老的客户端,需要设置 leftprotoport=17/%any
        right=%any
        rightprotoport=17/%any
        # 强制所有连接都NAT,因为 iOS
        forceencaps=yes

 注意你的ipsec.conf文件,”config setup” 和 “L2TP-PSK-NAT”、 “L2TP-PSK-NAT”应该顶着行头写,而其它行应该以8个空格缩进。

打开 /etc/ipsec.secrets,配置:

x.x.x.x   %any:  PSK "somegoodpassword"

 这里x.x.x.x 替换为你的服务器的IP地址,并设置一个复杂的密码。

启动 IPSEC 服务: 

/etc/init.d/ipsec start

 使用如下命令确认 ipsec 是否工作正常:

sudo ipsec verify

应该没有任何错误才行:

Checking your system to see if IPsec got installed and started correctly:
Version check and ipsec on-path                                 [OK]
Linux Openswan U2.6.28/K2.6.32-32-generic-pae (netkey)
Checking for IPsec support in kernel                            [OK]
NETKEY detected, testing for disabled ICMP send_redirects       [OK]
NETKEY detected, testing for disabled ICMP accept_redirects     [OK]
Checking that pluto is running                                  [OK]
Pluto listening for IKE on udp 500                              [OK]
Pluto listening for NAT-T on udp 4500                           [OK]
Checking for 'ip' command                                       [OK]
Checking for 'iptables' command                                 [OK]
Opportunistic Encryption Support                                [DISABLED]

 在 /etc/init.d 下创建一个名为 ipsec.vpn 的文件,内容如下:

case "$1" in
  start)
    echo "Starting my Ipsec VPN"
    iptables  -t nat   -A POSTROUTING -o eth0 -s 10.152.2.0/24 -j MASQUERADE
    echo 1 > /proc/sys/net/ipv4/ip_forward
    for each in /proc/sys/net/ipv4/conf/*
    do
      echo 0 > $each/accept_redirects
      echo 0 > $each/send_redirects
    done
    /etc/init.d/ipsec start
    /etc/init.d/xl2tpd start
;;
  stop)
    echo "Stopping my Ipsec VPN"
    iptables --table nat --flush
    echo 0 > /proc/sys/net/ipv4/ip_forward
    /etc/init.d/ipsec stop
    /etc/init.d/xl2tpd stop
;;
  restart)
    echo "Restarting my Ipsec VPN"
    iptables  -t nat   -A POSTROUTING -o eth0 -s 10.152.2.0/24 -j MASQUERADE
    echo 1 > /proc/sys/net/ipv4/ip_forward
    for each in /proc/sys/net/ipv4/conf/*
    do
      echo 0 > $each/accept_redirects
      echo 0 > $each/send_redirects
    done
    /etc/init.d/ipsec restart
    /etc/init.d/xl2tpd restart
;;
  *)
    echo "Usage: /etc/init.d/ipsec.vpn  {start|stop|restart}"
    exit 1
;;
esac

这会配置防火墙转发。记得修改上面文件的本地IP地址池10.152.2.0/24为你自己的。 

然后给这个文件设置可执行权限:

sudo chmod 755 ipsec.vpn

禁止默认的 ipsec 服务脚本运行:

sudo update-rc.d -f ipsec remove

然后,启用我们刚才定制的这个:

sudo update-rc.d ipsec.vpn defaults

L2TP

修改 /etc/xl2tpd/xl2tpd.conf :

[global]
ipsec saref = no
[lns default]
ip range = 10.152.2.2-10.152.2.254
local ip = 10.152.2.1
require chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes

 配置说明如下:

  • ip range = 可以连接VPN服务的客户端IP地址范围
  • local ip = VPN 服务器的IP,必须在客户端IP范围之外
  • refuse pap = 拒绝 pap 认证
  • ppp debug = 测试时打开

选择一个复杂的挑战-响应式验证字符串。虽然没有最短长度限制,不过它应该至少有16个字符,也应该足够复杂才能保证安全。

打开文件 /etc/xl2tpd/l2tp-secrets ,填入你的密码:

* * exampleforchallengestring

打开文件 /etc/ppp/options.xl2tpd,做如下配置:

 

refuse-mschap-v2
refuse-mschap
ms-dns 8.8.8.8
ms-dns 8.8.4.4
asyncmap 0
auth
crtscts
idle 1800
mtu 1200
mru 1200
lock
hide-password
local
#debug
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4

ms-dns 选项设置要给客户端分配的 DNS 服务器,当客户端连接时,就会被分配这些 DNS。如果要加入多个 DNS,就每行一个,分别写几行。

如果你要给客户端推送wins设置,可以分别设置如下选项。

mtu 和 mru 按照openswan.org的说法,减小 mru/mtu 的大小非常重要。因为  l2tp/ipsec 会封装几次,可能导致性能下降,减小这个配置的大小可以一次性传输全部的包。 

proxyarp 可以将连接的客户端的IP地址和以太网地址加入的系统的ARP表中。这会影响到本地局域网内其它客户端。

name l2tpd 用在 PPP验证文件里面。

添加用户

打开文件 /etc/ppp/chap-secrets ,做如下配置:

user1 l2tpd chooseagoodpassword *
user2 * chooseagoodpassword *

 每行包括如下字段:

  • 客户端 = 用户名称
  • 服务器 = 在上面的 /etc/ppp/options.xl2tpd 定义的名字
  • 密码 = 用户密码,你应该设置一个足够复杂的密码
  • IP 地址 = * 表示用户可以从任何地址连接,否则设置用户只能从特定的地址连接

注意:你可以添加多个用户。

IP转发

打开文件 /etc/sysctl.conf,修改配置:

net.ipv4.ip_forward=1

 载入新的配置:

sysctl -p

启动VPN 

sudo /etc/init.d/ipsec.vpn restart
sudo /etc/init.d/xl2tpd restart 

排除故障

如果遇到了问题,以下命令可以帮助你找到问题:

sudo tcpdump -i ppp0
sudo tail -f /var/log/auth.log
sudo tail -f /var/log/syslog

你可以可以在服务器上使用如下命令来监控:

sudo tcpdump -i eth0 host aaa.bbb.ccc.ddd and not port ssh

这里aaa.bbb.ccc.ddd 是你的客户端的公网地址。

(本文主要整理自 https://help.ubuntu.com 。)

来源:https://linux.cn/article-3409-1.html

Linux:RHEL 7特性说明(七):编译程序及工具

Red Hat Enterprise Linux 7.0 是 Red Hat 的下一代操作系统完整套件,旨在用于关键任务企业级计算以及顶级企业级软件和硬件零售商认证。

Linux:RHEL 7特性说明(七):编译程序及工具
Linux:RHEL 7特性说明(七):编译程序及工具

GCC 工具链

在 Red Hat Enterprise Linux 7.0 中,gcc 工具链是根据 gcc-4.8.x 发行系列开发,并包含大量针对 Red Hat Enterprise Linux 6 的改进和 bug 修复。同样,Red Hat Enterprise Linux 7 也包含binutils-2.23.52.x。这些版本与 Red Hat Developer Toolset 2.0 中的等效工具对应。Red Hat Enterprise Linux 6 和 Red Hat Enterprise Linux 7 gcc 的 binutils 版本对比请查看:

https://access.redhat.com/site/documentation/en-US/Red_Hat_Developer_Toolset/2/html/User_Guide/index.html#sect-Changes_in_Version_2.0-GCC

https://access.redhat.com/site/documentation/en-US/Red_Hat_Developer_Toolset/2/html/User_Guide/index.html#sect-Changes_in_Version_2.0-binutils

Red Hat Enterprise Linux 7.0 工具链的主要特点如下:

  • 构建符合 C++11 的应用程序的实验性支持(其中包括所有 C++11 语言支持)和一些 C11 功能的实验性支持。
  • 改进的并行应用程序编程支持,其中包括 OpenMP v3.1, C++11 类型和自动内存访问的 GCC 内嵌,以及事务内存的实验性支持(其中包括 Intel RTM/HLE 内联函数、内嵌以及代码生成)。
  • 新的本地注册分配程序(LRA),提高代码性能。
  • DWARF4 现在作为默认 debug 格式使用。
  • 各种新的具体架构选项。
  • 支持 AMD 产品线 15h 和 16h 处理器。
  • 接期(Link-time)优化支持。
  • 改进的警告和诊断。
  • 各种新的 Fortran 功能。

GLIBC

在 Red Hat Enterprise Linux 7.0 中,glibc 库(libc, libm, libpthread, NSS 插件及其他)是根据 glibc 2.17 发行本开发的,其中包含大量针对 Red Hat Enterprise Linux 6 对等产品的改进和 bug 修复。

Red Hat Enterprise Linux 7.0 glibc 库主要特点如下:

  • 实验性 ISO C11 支持。
  • 新的 Linux 接口:prlimit, prlimit64, fanotify_init, fanotify_mark, clock_adjtime, name_to_handle_at, open_by_handle_at, syncfs, setns, sendmmsg, process_vm_readv, process_vm_writev。
  • 使用流 SIMD 扩展(SSE)、补充流 SIMD 扩展 3(SSSE3)、流 SIMD 扩展 4.2(SSE4.2)以及高级矢量扩展(AVX)为 AMD64 和 Intel 64 架构新优化的字符串功能。
  • 为 IBM PowerPC 和 IBM POWER7 新优化的字符串功能。
  • 使用为 IBM System z10 和 IBM zEnterprise 196 特别优化的程序为 IBM S/390 和 IBM System z 新优化的字符串功能。
  • 新区域:os_RU, bem_ZA, en_ZA, ff_SN, sw_KE, sw_TZ, lb_LU, wae_CH, yue_HK, lij_IT, mhr_RU, bho_IN, unm_US, es_CU, ta_LK, ayc_PE, doi_IN, ia_FR, mni_IN, nhn_MX, niu_NU, niu_NZ, sat_IN, szl_PL, mag_IN。
  • 新编码:CP770, CP771, CP772, CP773, CP774。
  • 新接口:scandirat, scandirat64。
  • 已添加检查 FD_SET, FD_CLR, FD_ISSET, poll 和 ppoll 文件描述符版本的功能。
  • nscd 守护进程现在支持 netgroup 数据库缓存。
  • 新功能 secure_getenv() 可让您安全访问该环境,如果在 SUID 或者 SGID 进程中运行会返回 NULL。这个功能替换了内部功能 __secure_getenv()。
  • 现在如果传递违反那些值规范的盐字节(salt bytes),crypt() 功能会失效。在 Linux 中,crypt() 功能将查看 /proc/sys/crypto/fips_enabled 文件决定是否启用了 FIPS。如果启用了该模式,则无法在使用摘要算法 5(MD5)或者数据加密标准(DES)算法的加密字符串中使用。
  • 现在 clock_* 功能套件(在 中说明)可直接在主 C 库中使用。之前必须将其与-lrt 链接方可使用这些功能。这一变化的效果是使用此功能的单线程程序,比如 clock_gettime()(它未与 -lrt 链接)将不再会在运行时暗自载入 pthreads 库,同时也不会再受到其他代码(比如 C++ 运行时库)所支持的与多线程关联的消耗的困扰。
  • 新的标头 和功能 getauxval() 可让您在经过 Linux 内核时轻松访问 AT_* key-value 对。该标头还定义与 AT_HWCAP 密钥关联的 HWCAP_* 二进制数。
  • 已为低层具体平台功能记录了已安装标头的新等级。PowerPC 添加第一个附带功能的事务以便提供基于时间的注册访问。

GDB

在 Red Hat Enterprise Linux 7.0 中,GDB 调试程序来自 gdb-7.6.1 发行本,并包含大量针对 Red Hat Enterprise Linux 6 操作系统对等产品的改进和 bug 修复。

这个版本与 Red Hat Developer Toolset v2.0 中的 GDB 版本对应,以下列出了 Red Hat Enterprise Linux 6 和 Red Hat Enterprise Linux 7.0 GDB 版本之间的不同:

https://access.redhat.com/site/documentation/en-US/Red_Hat_Developer_Toolset/2/html/User_Guide/index.html#sect-Changes_in_Version_2.0-GDB-Red_Hat_Developer_Toolset_1

https://access.redhat.com/site/documentation/en-US/Red_Hat_Developer_Toolset/2/html/User_Guide/index.html#sect-Changes_in_Version_2.0-GDB-Red_Hat_Enterprise_Linux_6

Red Hat Enterprise Linux 7.0 中包含的 GDB 主要新功能有:

  • 使用新的 .gdb_index 部分和新的 gdb-add-index shell 命令更迅速地载入符号。注:在 Red Hat Enterprise Linux 6.1 及之后的版本中就有这个功能。
  • gdbserver 现在支持标准输入/输出(STDIO)连接,例如:(gdb) target remote | ssh myhost gdbserver – hello
  • 使用 -location 参数的 watch 命令有更多行为。
  • 可使用一个新命令 info vtbl 显示虚拟方法表。
  • 使用新命令 info auto-load, set auto-load 和 show auto-load 控制文件的自动载入。
  • 使用 set filename-display absolute 命令显示源文件名的绝对路径。
  • 使用新命令 record btrace 控制有硬件支持的流量记录。

Red Hat Enterprise Linux 7.0 所提供 GDB 的主要 bug 修复如下:

  • 已将 info proc 命令更新为可用于 core 文件。
  • 在下级的所有匹配的位置中设置断点。
  • 断点位置的文件名部分现在与源文件名称结尾部分匹配。
  • 现在可在内联函数中使用断点。
  • 现在可将模板实例化时将模板参数列入范围。

另外,Red Hat Enterprise Linux 7.0 提供一个新软件包 gdb-doc,该软件包包含 PDF、HTML以及信息格式的 GDB 手册。该 GDB 手册在之前的 Red Hat Enterprise Linux 版本中由主 RPM 软件包提供。

性能工具

Red Hat Enterprise Linux 7.0 中包含对一些性能功能的最新更新版本,比如 oprofilepapi 和elfutils,提供性能、可移植性及功能性改进。

此外还有 Red Hat Enterprise Linux 7.0 首先采用的功能:

  • 支持 Performance Co-Pilot
  • SystemTap 支持在整个非特权用户空间运行的基于 DynInst 检测,同时也支持基于 Byteman 的Java 应用程序精确探测。
  • 硬件事务内存的 Valgirnd 支持以及矢量化建模指令的改进。

⁠12.4.1. Performance Co-Pilot

Red Hat Enterprise Linux 7.0 引进 Performance Co-Pilot(PCP)支持,这是一个用来对系统级性能测定进行采集、归档和分析的工具、服务及库套件。其轻加权、分布式架构的特点使其特别适合复杂系统的集中分析。

可使用 Python、Perl、C++ 界面添加性能指标。分析工具可直接使用这些客户端 API(Python、C++ 和 C),且大量网页程序可使用 JSON 界面查看所有可用性能数据。

有关详情请参考 pcp 和 pcp-libs-devel 软件包 man page 中的具体论述。pcp-doc 软件包包括两本来自 upstream 项目的免费公开图书:

http://oss.sgi.com/projects/pcp/doc/pcp-users-and-administrators-guide.pdfhttp://oss.sgi.com/projects/pcp/doc/pcp-programmers-guide.pdf

⁠12.4.2. SystemTap

Red Hat Enterprise Linux 7.0 包含 systemtap 版本 2.4,它可提供一些新功能。这些包括可选的纯用户空间脚本执行、更丰富且有效的 Java 探测、虚拟机探测、改进的报错信息以及大量 bug 修复和新功能。特别是:

  • 使用 dyninst 二进制编辑库,SystemTap 现在可以执行一些纯用于用户空间层的脚本;无需提供内核或者 root 特权。这个模式可使用 stap –dyninst 选择,只启用那些对用户自己的进程产生影响的探测或者操作类型。注:这个模式与引发 C++ 异常的程序不兼容。
  • 与 byteman 工具联合支持向 Java 应用程序中注入探测的新方法。新的 SystemTap 探测类型 java(“com.app”).class(“class_name“).method(“name(signature)”).*,该探测类型启用了对进入退出某个应用程序的独立方法的探测,无需进行系统范围内的追踪。
  • 在 SystemTap 驱动程序中添加了新的程序,该程序可以启用在服务器中运行的由 libvirt 管理的 KVM 事务中执行远程任务。它可将编译的 SystemTap 脚本通过专门的安全 virtio-serial 链接自动且安全地传送到虚拟机中。新的虚拟机端守护进程将载入该脚本并将其输出结果传送回主机。这个方法比 SSH 更快速、有效,且不需要在主机和虚拟机之间建立 IP 级网络连接。要测试此功能,请运行以下命令:
    stap --remote=libvirt://MyVirtualMachine
  • 另外,对 SystemTap 诊断信息有了大量改进:
    • 现在很多信息给出相关手册页供参考。这些页面给出对出错信息的解释及建议修正。
    • 如果怀疑脚本输入包含排版错误,则会以分类列表方式向用户提供建议。当用户指定名称与可接受名称不匹配时会在很多上下文中使用这个建议功能,比如探测功能名称、标记符、变量、文件、别名等等。
    • 已改进诊断重复信息删除。
    • 在信息中添加 ANSI 颜色使其更容易理解。

⁠12.4.3. Valgrind

Red Hat Enterprise Linux 7.0 包含一个检测框架 Valgrind,该框架附带大量工具用于配置应用程序。这个版本是基于 Valgrind 3.9.0 发行本,且包含针对 Red Hat Enterprise Linux 6 和 Red Hat Developer Toolset 2.0 副本的大量改进,后者是在 Valgrind 3.8.1 的基础上开发的。

Red Hat Enterprise Linux 7.0 中包含的 Valgrind 的主要新功能如下:

  • 在安装了 DFP 程序的主机中支持 IBM System z 十进制浮点指令。
  • 支持 IBM POWER8 (Power ISA 2.07) 指令。
  • 支持 Intel AVX2 指令。注:只适用于 64 位架构。
  • Intel 事务同步扩展初期支持,包括受限制事务内存(RTM)以及硬件锁定省略(HIE)。
  • 在 IBM PowerPC 中对硬件事务内存的初期支持。
  • 已将转移缓存默认大小增加到 16 个扇区,表现为大程序需要插入并存储大量代码。同样,可追踪的与内存映射的片段数已增加了 6 倍。转移缓存中的最大扇区数可由新标签 –num-transtab-sectors 控制。
  • Valgrind 不再临时生成整个对象的映射以便从中读取数据,而是通过一个小的固定缓存读取。这样可在 Valgrind 从大的共享对象中读取 debug 信息时避免虚拟内存尖波。
  • 使用的禁止显示列表(如果指定 -v 选项就会显示)现在为每个使用的禁止显示提示文件名以及定义禁止显示的行号。
  • 现在可以使用新标签 –sigill-diagnostics 控制在即时(just-in-time,JIT)编译程序遇到它无法转译的指令时是否给出诊断信息。实际行为 — 向应用程序发出 SIGILL 信号 — 保持不变。
  • 已改进 Memcheck 工具,增加了下述功能:
    • 处理向量化代码能力的提升,大量减少错报。使用 –partial-loads-ok=yes 标签可从中获益。
    • 更好地控制泄露检查。现在可以指定应显示的泄露类型(definite/indirect/possible/reachable),哪些应被视为错误,以及哪些应通过给出泄露抑制而禁止显示。这可通过在 suppression 条目中分别使用选项 –show-leak-kinds=kind1,kind2,..、–errors-for-leak-kinds=kind1,kind2,.. 和自选 match-leak-kinds: 行完成。注:生成的泄露抑制包含这个新行,这比之前的发行本要更具体。要获取与之前发行本相同的行为,请在使用它们前从生成的抑制中删除 match-leak-kinds: 行。
    • 使用更好的试探法减少泄露检查程序中的 possible leak 报告。可用的试探法为std::stdstring、带有析构函数元素的新[ ]分配的阵列以及指向使用多个继承的 C++ 项目内置部分提供有效内部指针探测。可使用 –leak-check-heuristics=heur1,heur2,… 选项进行选择。
    • 对于堆上分配块更好的 stacktrace 捕获控制。使用 –keep-stacktraces 选项有可能独立控制是否为每个分配和取消分配进行栈跟踪。可使用这个选项生成更好的 “use after free”出错信息,或者通过记录更少的信息减少 Valgrind 的资源消耗。
    • 更好地报告泄漏禁止显示使用。已使用禁止显示列表(指定 -v 选项时会显示)现在为每个泄漏禁止显示在上次泄漏搜索中禁止显示的块和字节数。
  • 使用以下监控命令改进了 Valgrind GDB 服务器整合:
    • 新的监视器命令 v.info open_fds 给出打开的文件描述符及附加信息列表。
    • 新的监视器命令 v.info execontext 可显示 Valgrind 记录的栈追踪信息。
    • 新的监视器命令 v.do expensive_sanity_check_general 运行某些内部一致性检查。

编程语言

⁠Ruby 2.0.0

Red Hat Enterprise Linux 7.0 提供最新的 Ruby 2.0.0。版本 2.0.0 与 Red Hat Enterprise Linux 6 中所包含版本 1.8.7 的主要不同点在于:

  • 新的解释程序 YARV(另一个 Ruby VM),该程序可限制降低载入时间,特别是那些有大树结构或者文件的应用程序。
  • 新且迅速的 “Lazy Sweep” 垃圾收集程序。
  • Ruby 限制支持字符串编码。
  • Ruby 限制支持内部线程而不是绿色线程。

有关 Ruby 2.0.0 的详情请参考该项目的 upstream 页:https://www.ruby-lang.org/en/

⁠Python 2.7.5

Red Hat Enterprise Linux 7.0 包含 Python 2.7.5,它是 Python 2.7 系列发行本的最新版本。这个版本包含很多性能改进,并向前兼容 Python 3。Python 2.7.5 中的主要变化如下:

  • 排序的字典类型
  • 快速的 I/O 模块
  • 集合及代码词典解读
  • sysconfig 模块

有关这些变化的完整列表请参考 http://docs.python.org/dev/whatsnew/2.7.html

⁠Java 7 及多个 JDK

Red Hat Enterprise Linux 提供 OpenJDK7 作为默认 Java 开发套件(JDK),Java 7 作为默认 Java 版本。所有 Java 7 个软件包(java-1.7.0-openjdk, java-1.7.0-oracle, java-1.7.0-ibm)允许平行安装多个版本,类似于内核。平行安装的功能可让用户同时尝试多个 JDK 版本,以便在需要时调节性能并解决问题。准确的 JDK 与原来一样通过备选方法进行选择。

 

本系列文章来自 RHEL 7.0 的发行注记,完整内容请移步:https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/7/html/7.0_Release_Notes/index.html 

来源:https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/7/html/7.0_Release_Notes/index.html

Linux:RHEL 7特性说明(八):联网与认证

Red Hat Enterprise Linux 7.0 是 Red Hat 的下一代操作系统完整套件,旨在用于关键任务企业级计算以及顶级企业级软件和硬件零售商认证。

Linux:RHEL 7特性说明(八):联网与认证
Linux:RHEL 7特性说明(八):联网与认证

联网

⁠网络分组

已引进网络分组技术作为链路聚集的捆绑备用方法。该技术旨在轻松管理、debug 和扩展。它可为用户提供性能和灵活性提高,且应为新安装进行评估。

⁠NetworkManager

已对 NetworkManager 进行了大量改进使其更适合在服务器应用程序中使用。特别是NetworkManager 不再默认查看配置文件更改,比如那些由编辑器或者开发工具更改的配置文件。管理员可使其意识到使用 nmcli connection reload 命令进行的外部修改。使用NetworkManager 的 D-Bus API 或者 NetworkManager 命令行工具 nmcli 进行的修改仍可立即生效。

引进 nmcli 工具是要让用户和脚本可以与 NetworkManager 互动。

chrony 套件

可使用程序套件 chrony 更新系统中不适合传统持久联网系统时钟,那些时钟总是在专门服务器分类中。应在所有经常挂起的系统中,或者间歇性断开并重新连接到网络的系统中关注 chrony 套件。例如:移动系统和虚拟系统。

⁠动态防火墙守护进程 firewalld 套件

Red Hat Enterprise Linux 7.0 提供动态防火墙守护进程 firewalld,它可提供一个动态管理的防火墙,并支持网络“区域”以便为网络及其相关链接和接口分配可信度。它还支持 IPv4 和 IPv6 防火墙设置。它支持以太网桥接并有独立的运行时和持久配置选项。它还有一个可直接添加防火墙规则的服务或者应用程序接口。

⁠DNSSEC

DNSSEC 是一组域名系统安全扩展(DNSSEC),允许 DNS 客户端认证和检查来自 DNS 名称服务器响应的完整性以便确认其起始点,并确定在中转过程中是否受到影响。

⁠OpenLMI

Red Hat Enterprise Linux 7.0 中附带 OpenLMI 项目,它为管理 Linux 系统提供常用的基础设施。它还可让用户配置、管理并监控硬件、操作系统及系统服务。OpenLMI 旨在简化任务配置及产品服务器管理。OpenLMI 旨在为 Red Hat Enterprise Linux 的多个版本提供常用管理接口。它是构建在现有工具的顶层,提供一个提取层,为系统管理员过滤了很多底层系统的复杂性。OpenLMI 由安装在要管理的系统中的一组系统管理代理、可管理这些代理并为其提供界面 OpenLMI 控制程序以及使用 OpenLMI 控制程序调用系统管理代理的客户端应用程序或者脚本。OpenLMI 可让用户执行以下操作:

  • 配置、管理和监控裸机产品服务器及虚拟机;
  • 配置、管理和监控本地或者远程系统;
  • 配置、管理及监控存储和网络;
  • 使用 C/C++、Python、Java 或者命令行界面调用系统管理功能

请注意,OenLMI 软件提供程序是作为技术预览支持。该软件功能完善,但某些操作可能会消耗大量资源。有关 OpenLMI 的详情请参考 http://www.openlmi.org

⁠qlcnic 驱动程序中的 SR-IOV 功能

已在 qlcnic 中添加单一 Root I/O 虚拟化(SR-IOV)支持作为技术预览。对这个功能的支持直接由 QLogic 提供,同时鼓励用户为 Red Hat 提供反馈意见。仍全面支持 qlcnic 驱动程序中的其他功能。

⁠FreeRADIUS 3.0.1

Red Hat Enterprise Linux 7.0 包含 FreeRADIUS 版本 3.0.1,它可提供大量新功能,其中主要有:

  • RadSec,用于使用 TCP 和 TLS 传输 RADIUS 数据包的协议。
  • Yubikey 支持。
  • 连接池。radiusd 服务器为各种后端(SQL、LDAP 及其他)维护连接。连接池可在较低资源需求的情况下提供较大的吞吐量。
  • 已扩展服务器配置编程语言 unlang 语法。
  • 提高了对 site-specific 和 vendor-specific 属性的支持。
  • 提高了 debug 功能,在详细输出结果中突出显示问题所在。
  • 生成 SNMP 陷阱。
  • 改进的 WIMAX 支持。
  • EAP-PWD 支持。

⁠可信的网络连接

Red Hat Enterprise Linux 7.0 引进了可信网络连接功能作为技术预览。可信网络连接可用于现有网络访问控制(NAC)解决方案,比如 TLS、802.1x 或者 IPSec 整合端点态势评估,即收集端点系统信息(比如操作系统配置设置,安装的软件包及其他,总称为完整性测量)。在允许该端点访问该网络前使用可信网络连接根据网络访问策略确认这些测量。

认证和互操作性

⁠新的信任实施

目前在 Red Hat Enterprise Linux 5.9 客户端以及之后的 Red Hat Enterprise Linux 6.3 客户端中支持使用在 Active Directory 中定义的用户 ID 或者组 ID,而不是由用户安全标识符生成的用户 ID 或者组 ID。如果在 Active Directory 中定义了 POSIX 属性,这个信任实施就很有用。

⁠已更新 slapi-nis 插件

Red Hat Enterprise Linux 7.0 拥有更新后的目录服务器插件 slapi-nis,该插件允许 Active Directory 用户在原有客户端中进行认证。注:这个功能时技术预览。

⁠IPA 的备份和恢复机制

IPA 组件的备份和恢复机制在 Red Hat Enterprise Linux 7.0 中是作为技术预览提供。

⁠Samba 4.1.0

Red Hat Enterprise Linux 7.0 中包括升级到最新 upstream 版本的 samba 软件包,该软件包引进了一些 bug 修复和改进,最主要的是支持服务器和客户端工具中的 SMB3 协议。

另外,SMB3 传输可启用对支持 SMB3 的 Windows 服务器以及 Samba 服务器的加密传输连接。同时,Samba 4.1.0 添加了对服务器端复制操作的支持。采用支持服务器端复制操作的客户端,比如最新的 Windows 发行本应体验到明显的文件复制操作性能提高。

警告

更新后的 samba 软件包删除了一些已弃用的配置选项。最主要的是服务器角色 security = share 和 security = server。另外,已完全删除网页配置工具 SWAT。有关详情请参考 Samba 4.0 和 4.1 发行注记:

https://www.samba.org/samba/history/samba-4.0.0.html

https://www.samba.org/samba/history/samba-4.1.0.html

注:更新了一些 tdb 文件。就是说您启动 smbd 的新版本后就会升级所有 tdb 文件。您无法降级到原来的 Samba 版本,除非您备份那些 tdb 文件。

有关这些变化的详情请参考上述 Samba 4.0 和 4.1 发行注记。

⁠AD 和 LDAP sudo 提供程序的用法

AD 提供程序是一个用来连接 Active Directory 服务器的后端程序。在 Red Hat Enterprise Linux 7.0 中,支持将 AD sudo 提供程序与 LDAP 提供持续一同使用是最为一项技术预览提供的。要启用 AD sudo 提供程序,请在 sssd.conf 文件的 domain 部分添加 sudo_provider=ad 设置。

 

本系列文章来自 RHEL 7.0 的发行注记,完整内容请移步:https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/7/html/7.0_Release_Notes/index.html

来源:https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/7/html/7.0_Release_Notes/index.html

Linux:RHEL 7特性说明(九):Web服务器和相关服务

Red Hat Enterprise Linux 7.0 是 Red Hat 的下一代操作系统完整套件,旨在用于关键任务企业级计算以及顶级企业级软件和硬件零售商认证。

Linux:RHEL 7特性说明(九):Web服务器和相关服务
Linux:RHEL 7特性说明(九):Web服务器和相关服务

Apache HTTP 服务器 2.4

Red Hat Enterprise Linux 7.0 中包含的 Apache HTTP 服务器版本 2.4(httpd)包含下列新功能:

  • “事件”处理模块的加强版,提高了异步请求进程和性能;
  • mod_proxy 模块中固有的 FastCGI 支持;
  • 使用 Lua 语言支持内嵌的脚本。

有关 httpd 2.4 中的功能和变化请参考http://httpd.apache.org/docs/2.4/new_features_2_4.html

包含配置文件的指南请查看http://httpd.apache.org/docs/2.4/upgrading.html

⁠MariaDB 5.5

Red Hat Enterprise Linux 7.0 中 MySQL 的默认实施是 MariaDB。MariaDB 是由社区人员开发的 MySQL 数据库项目,并提供 MySQL 的替代品。MariaDB 保留了与 MySQL 的 API 和 ABI 兼容性,并添加了一些新功能。例如:未阻断的客户端 API 库,有加强性能的 Aria 和 XtraDB 存储引擎,更优的服务器状态变量或者改进的复制功能。

有关 MariaDB 的详情请参考 https://mariadb.com/kb/en/what-is-mariadb-55/

⁠PostgreSQL 9.2

PostgreSQL 是一个高级对象关系数据库管理系统(DBMS)。postgresql 软件包包括 PostgreSQL 服务器软件包及访问 PostgreSQL DBMS 服务器所需客户端程序和库。Red Hat Enterprise Linux 7.0 提供 PostgreSQL 版本 9.2.有关新功能、bug 修复以及与 Red Hat Enterprise Linux 6 提供的版本 8.4 之间可能的不兼容性列表,请参考 upstream 发行注记:

或者 PostgreSQL wiki 网页:

 

本系列文章来自 RHEL 7.0 的发行注记,完整内容请移步:https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/7/html/7.0_Release_Notes/index.html

来源:https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/7/html/7.0_Release_Notes/index.html

Linux:Linux 目录导航技巧

目录当行是命令行系统的基础概念.虽然不是什么难以理解的东西,但是知道一些技巧能够丰富你的经验并且提高工作效率.在这篇文章中,我们会讨论这些小技巧。

我们已经知道的东西

在开始高级技巧之前,有一些必须知道的基本命令:

  • ‘pwd’显示当前目录
  • ‘cd’ 改变当前目录
  • ‘cd’ 跟两个点(cd ..)能返回父目录
  • ‘cd’ 跟着相对目录就能直接切换当相对目录下
  • ‘cd’ 跟着绝对目录就能切换到绝对目录下

高阶技巧

这节将介绍几个技巧方便你进行目录的切换

从任何地方回到home目录

虽然使用‘cd /home/<你的主目录>’, 不是什么大麻烦, 但是有一种方法直接打‘cd’ 就能回到你的主目录.

例子:

$ pwd
/usr/include/netipx
$ cd
$ pwd
/home/himanshu

所以无论你在哪个目录下,都能这么干,然后回到home目录。

注意– 如果要切换到某个其它的指定用户的目录下, 就使用 ‘cd ~user_name’

用cd – 在目录间切换

假设你的当前工作目录是这样的:

$ pwd
/home/himanshu/practice

如果你想切换到 /usr/bin/X11, 然后又想回到之前的目录。 你会怎么做? 最直接的 :

$ cd /usr/bin/X11
$ cd /home/himanshu/practice/

虽然这样行得通,但是要记住这些复杂的目录就太笨了。这种情况下使用 ‘cd -’ 命令就行.

使用 ‘cd -’的第一步和上面的例子是一样的, 你可以 cd 到你想要切换到的<路径>下,但是回到之前的目录用 ‘cd -’就可以。

$ cd /usr/bin/X11
$ cd -
/home/himanshu/practice
$ pwd
/home/himanshu/practice

如果你想再次回到刚刚访问的目录(在这个例子中是/usr/bin/X11),再使用’cd -‘就可以。但是这个命令只会记住上一次访问的目录,这是一个缺点。

用 pushd 和 popd 来切换目录

如果你对’cd -‘非常了解了的话,你会发现这个命令只能帮助你在两个目录之间移动,但是很多场景下需要在很多目录之间切换。比如你要从A切换到B再到C然后又想回到A。

一般来说,你需要打出A的完整路径,但是如果这个路径非常复杂,将是非常烦人的一件事,特别是在你的切换非常频繁的话。

一些场景下可以使用 ‘pushd’ 还有 ‘popd’ 命令。 ‘pushd’ 将一个目录存到内存中,‘popd’ 将目录从内存中去除,并且转换到那个目录下。

例如:

$ pushd .
/usr/include/netipx /usr/include/netipx
$ cd /etc/hp/
$ cd /home/himanshu/practice/
$ cd /media/
$ popd
/usr/include/netipx
$ pwd
/usr/include/netipx

使用‘pushd’ 命令存储当前的工作目录 (用 .表示), 然后切换到各种各样的目录去。为了返回之前的目录,只要使用 ‘popd’命令就行了。

(LCTT译注:显然,pushd和popd 是堆栈式操作,你可以push多个目录,然后逐一pop出来,自己试试吧。)

(LCTT译注2:我们之前介绍的autojump,更加智能,不过需要安装一下。)

注意– 你也可以使用不带参数的 ‘pushd’ 来切换到之前存储的目录, 但是不会像 ‘popd’ 一样去除这个目录。


via: http://linoxide.com/linux-command/directory-navigations-tips-tricks/

译者:ggaaooppeenngg 校对:wxy

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

来源:https://linux.cn/article-3422-1.html

Linux:LFS编译过程必备辅助手册(一)

很多人对Linux进行了一定的学习之后,都会有一种自己从头搭建一套Linux的想法,在这方面LFS和Gentoo都是不错的起点。不过虽然它们已经尽量提供详细文档了,但对于初学者来说还是存在一定的困难的。

因此本站特邀 PHILO (@看见微软我就跑)和 米油 两位同学将他们自己学习LFS的经验分享给大家,也希望大家一起来参与到LFS之旅中。

前言

LFS(Linux from scratch)是从源代码开始编译Linux操作系统。如果需要深度定制Linux操作系统或者需要更加深入学习Linux的学习者可以从这里开始您的旅途。这份意义的深渊不必多说。 同时也希望您能加入我们一起开始这段旅程: →加入我们←

Linux:LFS编译过程必备辅助手册(一)
Linux:LFS编译过程必备辅助手册(一)

从7月初开始我们团队里面两个人为了更加深入的学习Linux方面的知识。也为了瞻仰LFS大神们的光辉。 开始了LFS的旅程,因为LFS官方文档写的虽然非常具体,但是多多少少对于一些Linux新手来说造成很多困扰。

因此我们团队做完LFS之后写了这篇辅助性质的说明,对新手遇到问题的时候提供帮助。

进行LFS旅程的前提条件

  1. 比较熟悉Linux操作
  2. 有一定Linux开发基础
  3. 在LFS之前有过从源码编译软件的经验。
  4. 有一定的英文基本功,除了看手册之外,有的时候抛出错误的时候应该有google查找并解决错误的能力。

文档使用方法:

  1. 首先对本辅助文档完整的浏览一遍,这样有助于理解LFS的整个过程做什么
  2. 然后扫一遍LFS官方文档的目录,这样至少知道每个章节的目的。
  3. 当你进行到LFS某一步时,遇到问题后可以对应上本辅助手册的具体问题的解决方案

LFS全过程概括

  1. 对磁盘的准备和用户的准备
  2. 建立temp系统
  3. 编译LFS系统
  4. 最后调整

LFS 编译完成的成果

LFS在编译完成的最后除了Linux基础内核目录结构(bin etc lib proc dev等等这些)还有一个tools这个目录(过程概括中的第2部分),它的存在是为了编译LFS整个系统的。所以在第五章这一部分中,就是利用ubuntu或centos主机系统的编译环境(称之为HOST)来编译出tools这个目录下的编译环境。

提示:其实制作LFS所有用到的工具链接,就是在ubuntu或centos下编译出一个新的交叉编译器(就是/tools目录下的所有工具),而这个新的交叉编译器在编译出来后,就不会依赖于现有操作系统编译器和库文件(ubuntu or centos),此时我们就可以利用这个全新的交叉编译工具(/tools目录下的所有工具)制造属于我们自己的Linux了,利用这个新的工具,从源码开始编译出所有我们需要的软件和库,最后编译Linux内核,设置bash脚本,启动脚本,tmpfs文件系统需要的配置文件,整个LFS的过程就结束了。

A: Linux发行版本的选择

  1. CentOS 6.3 (虚拟机双硬盘)
  2. Ubuntu 14.04 with GCC4.4(64bit) (笔记本电脑+双硬盘+LFS系统构建在SSD硬盘上)
  3. 在以上两种Linux发行版上分别进行编译运行,且最终都取得成功。
  4. 使用LFS官网上LFS7.5的源码进行编译制作

B:前四章的内容:硬盘分区、用户准备篇

主机所用操作系统的准备工作: (ubuntu14.04 64位下需要安装的软件)

1.在ubunt下安装bison(ubuntu下默认没有安装)

sudo apt-get install bison
#LFS 手册要求

2.不能用gcc4.8,需要换成gcc4.4(ubuntu14.04默认gcc4.8)

 sudo apt-get install gcc-4.4 g++-4.4
 sudo rm `which gcc`
 sudo rm  `which g++`
 sudo ln -sv /usr/bin/gcc-4.4  /usr/bin/gcc
 sudo ln -sv /usr/bin/g++-4.4  /usr/bin/g++

这里CentOS没有什么特别要说的。主要因为全部都用默认的,就可以了。各种依赖C6-Media就可以解决 

3.到LFS官网上下载LFS7.5的所有源码: ftp://ftp.lfs-matrix.net/pub/lfs/lfs-packages/

1.磁盘分区准备

  1. plan: 准备一个10到20GB的分区,这一步请谨慎操作
  2. action: 创建分区(表)并格式化。创建分区表请使用fdisk , 如果需要图形界面下的请使用GPartion,如果这两种工具都不会请到windows下分区(无需格式化)
#格式化分区
sudo mkfs -v -t ext4  /dev/sdaX #这里的X是填上自己的分区号

PS:因为现在计算机的内存都比较大,所以可以不需要swap分区。(第一次进行LFS,一个根“/”分区就够了,等以后有经验了,在进行多分区的操作)

2.用户准备

直接参考手册上的来就行了。

小建议:

PS1='[[e[32m]###[e[31m]u@[e[36m]h w]$[e[m]’

PS1修改成这个变量看着能舒服点。

注意:每次开机,或是重启后,在进入lfs用户前,都要对 LFS变量进行检查,查看LFS=/mnt/lfs变量是否存在,然后对lfs使用的分区进行挂载

前四章的小结:

  1. 这一部分没有什么难点,准备硬盘分区是因为要让LFS作为独立的硬盘来启动。新建分区、格式化分区、准备lfs用户是Linux操作的基础素质。 注意 :为了下面的编译过程能更快,可以在输入make命令时在后面加入-j4,使用4个进程进行同时编译,在多核处理器上编译的速度有明显提升

开始进入编译代码的环境(每次开机或重启动后需要进行下面步骤进入lfs用户环境)

  1. 首先导入LFS变量
export LFS=/mnt/lfs
#建议放到/etc/profile下方便一直用

   2. 然后挂载LFS的分区

sudo mount -v -t ext4 /dev/sdaX $LFS  #X为你的LFS硬盘分区号

   3. 最后就可以切换到lfs用户了

su - lfs  #注意中间这个 - 符号是一定要的,代表为lfs用户启动一个login shell

补充:通常我们在开机后,启动的第一个shell称之为login shell,当进入GUI界面后,不需要输入密码启动的shell称之为non-login shell。这两种shell是有区别的。大家都知道shell的运行是需要环境变量的支持的。配置这些环境变量的文件就是配置shell工作环境的文件。两种shell在读取配置文件时有很大的不同,下面是总结它们分别读取哪些配置文件:

  1. login shell 启动—>读取/etc/porfile文件—>读取~/.bash_profile文件
  2. no-login shell 启动—>读取~/.bashrc文件
  3. exec env -i /bin/bash命令会开启一个全新的non-login shell。

注意:每次重新开机或重启后都需要进行下面的步骤,切换到lfs用户,因为对于新手来说,不可能一天就编译完lfs的所有源,可以把以上步骤保存到一个文件中,每次重启系统进行LFS之前,参照以上步骤进入到LFS编译环境。

C: 第五章的内容:编译得到$LFS/tools/目录下面的工具包

    • 第一步,编译出一个全新的与主机系统无关的工具链。这些工具链包含了:compiler(就是我们常用的gcc,g++),assembler(就是把汇编程序变成a.obj文件的工具),linker(就是把很多*.obj文件和库文件链接成可运行文件a.out的工具),还有各类库文件(为后面编译其它的软件提供基础设施),当然还有大量的其它工具
    • 第二步,得用第一步编译出来的工具,编译其它的工具(这里可以看出,在制作LFS的过程中,编译的先后顺序是非常生要的,因为有了鸡,才能下蛋)
    • 注意 1:上面两步编译出来的工具都会安装到 $LFS/tools目录下面(也就是/mnt/lfs/tools目录下面)。LFS手册中把这个称之为临时的文件系统,就是因为$LFS/tools这个目录在第6章结束时就会被删除,因为$LFS/tools已经使用完了,没有利用价值了。
    • 注意 2:参照LFS手册上的指令进行编译,基本不会遇到错误,因为编译代码的步骤就是老三样:configure && make && make install,但是有一点,一定要注意,所有的安装包一定要打补丁,因为LFS手册没有强调打补丁的过程,所以自己如果发现这个源码包有补丁文件,一定要记得打上。
    • 注意 3:因为需要编译的软件太多,到最后你可能不会愿意自已每个单词都输入到命令行进行编译,所以通常会直接复制LFS手册中的命令。但是复制时,请一定注意先把指令复制到一个空的文件编辑器中,然后检查一下,复制过来的内容是否正确,因为从PDF文件复制到文本中的内容,格式会发生很大的变化。这一点在你尝试的过程中就会发现了。然后在文本编译器或是vim中进行编辑后,在复制到lfs用户的命令行中。
    • 注意 4:在编译perl时,按照官方文档打补丁会出现readonly的错误,下面是是正确的操作命令:
      cd /mnt/lfs/sources
      tar xvf perl-5.16.2
      cd perl-5.16.2/hints
      cp linux.sh linux.sh.org
      cd ..
      patch -Np1 -i ../perl-5.16.2-libc-1.patch
      cd hints
      diff linux.sh linux.sh.org   #输出打补丁情况,则为正常打补丁,编译过程参考手册
      
    • 注意 5:手册上的configure的位置一定刚要注意有三种情况,第一种是在源代码目录之外进行configure,第二种是在源代码目录里面进行configure,第三种(特殊情况)是libstdc++是在gcc源码目录的子目录里面进行configure。所以在执行命令之前一定刚要看好执行命令的前提条件,不妨思考一下LFS的笔者为什么这么写。
    • 温馨提示: 第一次编译GCC时可能会遇到环境问题,不要气馁,失败是正常的(我失败了10次以上)。不过我们可以保证LFS手册上的命令质量是非常高的。经过亲身测试绝对没有错误。

来源:https://linux.cn/article-3428-1.html

Linux:Ubuntu 14.04 LTS: 定制 Unity

虽然Unity桌面管理器自从伴随 Ubuntu 11.10首次发布以来表现出了强劲的性能,并在可用性上迈进了一大步,但是有人对自定义其外观和行为所带的限制感到反感。我们现在来看看如何自定义Unity,让你重拾自己掌控桌面的感觉。

Unity中的可用定制项目

在ubuntu 14.04中,Unity 有一些以前没有的可定制项。登入你的 Unity,进入“设置”并选择“显示”,你将看到以下画面:

Linux:Ubuntu 14.04 LTS: 定制 Unity
Linux:Ubuntu 14.04 LTS: 定制 Unity

Ubuntu 14.04 LTS 显示和 Unity 设置

你看到的大多数项目相比 Ubuntu 11.01 而言都是新的,而且一些相比较上一个版本的 Ubuntu13.10 也是新的。从Ubuntu13.10开始,Ubuntu加入了可以改变菜单栏和标题栏大小的新特性。

Unity中所特有的一个特性是我们能够打开或者关闭的“粘性边缘”功能,它能让你的鼠标停止在多显示器组的每个屏幕的边缘,它使光标暂时停在边缘,仿佛是鼠标卡住了一样,我们可以选择关闭它。(LCTT译注,其实我觉得挺有用的,可以避免无意中切换到其他工作桌面,不要关闭)

在“设置”中选择“外观”选项,可以看到如下画面。

Linux:Ubuntu 14.04 LTS: 定制 Unity
Linux:Ubuntu 14.04 LTS: 定制 Unity

Ubuntu 14.04 LTS 显示和Unity设置

这里我们可以看到一个人们最渴望在 Unity 启动器栏中包含的功能-能够改变启动器大小。虽然在Ubuntu 11.10及以后的各种版本中可以通过多种方法实现这个特性,但将其放入外观设置中使其显得更加正式。我喜欢它能将启动器图标缩小直至16的功能(我们接下来所要讲到的工具仅能支持最小调至24)。

Unity Tweak Tool-强大!

在Unity首次伴随Ubuntu 11.10发布的几天之内这款工具就跟着出现了,只是你得大费周折去自己把它安装好而且在Unity升级时它可能会损坏。

然而现在它被正式添加进了Ubuntu的默认软件仓库并且会在Unity更新时同时更新。它附带大量的定制项,那么我们就来安装它吧:

sudo apt-get install unity-tweak-tool

安装好,启动后你将看到如下画面:

Linux:Ubuntu 14.04 LTS: 定制 Unity
Linux:Ubuntu 14.04 LTS: 定制 Unity

正式的Unity Tweak Tool

这款工具它集大量Unity桌面定制项目于一体。这些定制项大多能通过默认的Unity设置,命令行操作或者是即使是编辑有时候也很难寻找到的配置文件来实现。

我们可以改变启动器栏,网页小程序和面板的行为,可以在Unity菜单中搜索等等。所有的都通过着一个工具来实现。花些时间去挖掘适合你的选项-Unity Tweak Tool-学习它,和它一起生活,爱上它(如果你使用Unity,这是起码的)

结尾的一些想法

Ubuntu 14.04 LTS 越来越被人们视作Linux上的典型的Desktop,(对不起,Canonical,你还没有摆脱Linux身份),Linux Desktop不仅可以作为偶尔使用Linux的那些人(的确有这样的事)的选择,也适用于骨灰级linux专家。

比之前没有工具,功能可以定制,或是通过配置文件修改定制但是有可能被之后个更新所破坏,现在对于Unity桌面我们就拥有了更多的控制权。Unity桌面性能强劲可靠,又通过Unity Tweak Tool加入一些特色元素,使得它的外观也酷极了!!!

请给我们你的想法或者点击链接发表你对Unity桌面的评论,我们将有兴趣知道你是如何使用Ubuntu 14.04 LTS 的。


Terrence T. Cox

开发者,Linux倡导者,开源爱好者。 进入这个技术领域很久,被认为经验丰富,但从未感到厌倦。 Twitter


via: https://linuxacademy.com/blog/linux/ubuntu-14-04-lts-customizing-unity/

译者:Love-xuan 校对:wxy

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

来源:https://linux.cn/article-3432-1.html

Linux:教你用NeoBundle管理Vim插件

NeoBundle 是一个 Vim 的插件管理器,以 Vundle 为基础(Vundle 是一个基于 Pathogen 的 Vim 插件管理器)。在之前的文章中,我非常不推荐使用 Neobundle,原因是它当时还处于高速开发阶段(LCTT:意味着不稳定、变数大),并且当时它的英文文档很少。现在,已经过了一年多了,这两个问题都早已不再是问题。

我们为什么要使用插件管理器?Vim 支持大量插件,但是由于它没有严格定义框架,插件的文件可以胡乱分布在不同目录下,导致用户管理起来会很困难(LCTT:当然,前提是你有很多插件,还有点小小的强迫症,觉得理一理这些插件心里会舒服点)。而一款插件管理器能让管理变得简单许多。Pathogen, Vundle 和 NeoBundle 的工作就是为不同插件建立一个目录,然后将这些目录扔到 ~/.vim/bundle 目录下。这个文件整理方法可以让你方便彻底地删除插件,使用 ‘rm -rf <插件目录>‘ 或直接在文件管理器里面把插件所在的目录删除就可以了,绝对绿色环保无残留。同时,这种方法还能最大程度避免插件与插件之间的不兼容性。

Linux:教你用NeoBundle管理Vim插件
Linux:教你用NeoBundle管理Vim插件

NeoBundle 是一个基于 Vundle 的项目,如同 Vundle,它们都可以安装和升级插件。然而 NeoBundle 的说明文件上明确指出:“NeoBundle 不是一个稳定的插件管理器,如果你想要一个稳定的,请选择 Vundle”。最新的 release-note 上也有警告“可能会造成兼容性问题”——这是一个开发者写的注解,说明这个管理器还不能让人放心使用。

所以,我们为什么要使用 NeoBundle?它都不能保证稳定运行!好吧,它还是有可取之处的。Vundle 只支持 Git 这种版本控制系统,而 NeoBundle 可以支持 SubversionMercurial。另一个原因是如果你不想插件升级时破坏你的 Vim 生态环境,你可以锁住 NeoBundle,让它只使用某个插件的固定版本。

另外,NeoBundle 创建者,Shougo Matsuishita(LCTT:名字看着像日本人),正在将它的命令接口添加到其他插件项目,以便减少他们的命令使用量。现在 NeoBundle 支持3种插件:unite.vim,Vim 使用的文件和缓存管理器;vimshell.vim,Vim 使用的脚本程序;vimproc.vim,运行于 vimshell.vim 中,用于对异步事件的支持。上面说的都是特殊案例,缺少英文文档,所以用户希望有人能完善它们。在正式使用它们之前,我们需要把注意力先集中在一些基本操作上。

安装并初始化 NeoBundle

NeoBundle 支持 Vim 7.2.051 或更高版本,需要 git 和 cURL(用于下载文件)。你可以手动下载 NeoBundle,也可以使用 cURL 下载它在 GitHub 上的库。在你的 home 目录下使用如下命令,可以将 NeoBundle 插件下载到 .vim/bundle/neobundle.vim 目录里,然后 NeoBundle 就能管理它自己了。

curl https://raw.githubusercontent.com/Shougo/neobundle.vim/master/bin/install.sh | sh

你还需要修改 .vimrc 文件。NeoBundle 的 GitHub 主页提供一个 .vimrc 范本,但是直接使用这个范本,NeoBundle 需要你安装5个可能不需要插件。如果不需要它们,你可以使用下面的最小配置:

if has('vim_starting')
set nocompatible
set runtimepath+=~/.vim/bundle/neobundle.vim/
call neobundle#begin(expand('~/.vim/bundle/'))
NeoBundleFetch 'Shougo/neobundle.vim'
call neobundle#end()
filetype plugin indent on

上述配置的作用是:启动 NeoBundle 并且像其他插件一样升级自己。NeoBundle 默认从 GitHub 下载并升级,如果你正好在使用 GitHub,你只需要为这个插件指定维护者的用户名和路径。在上面的配置中,NeoBundleFetch 只需要指定为“Shougo/neobundle.vim”,而不是完整的 GitHub 路径。如果你想使用其他网站,比如是 Subversion 或 Mecurial 的网站,你就需要添加完整的 URL。

如果你想安装其他插件,你可以使用下面的命令:

curl -k https://github.com/[项目维护者]/[插件路径] > ~/.vim/bundle/[插件路径]

举个例子:你想安装 vim-abolish,一个超级 NB 的文本搜索和替换插件,就使用下面的命令:

curl -k https://github.com/tpope/vim-abolish > ~/.vim/bundle/abolish

如果要让它自动升级,在 NeoBundleFetch 那行下面添加一行:

NeoBundle 'tpope/vim-abolish'

再介绍一个小技巧:你可以为插件指定一个分支或版本号。什么意思?NeoBundle 只会使用这个插件的某个分支或版本,而忽略其版本更新。如果你使用的某个插件处于高速开发过程,你就可以使用这个技巧,避免用到有 bug 的插件版本。举个例子:

NeoBundle 'Shougo/vimshell', { 'rev' : '3787e5' }

还有一个技巧:在 .vimtc 文件内添加一行关于“NeoBundleCheck”的属性。NeoBundle 会根据配置检查没安装的插件,并提示你安装它们。你也可以使用命令“:NeoBundleInstall”(LCTT:这是要在 Vim 编辑器的命令模式下输入)来安装或升级插件。

NeoBundle 用法

很多 NeoBundle 命令用起来和 Vundle 类似,但命令的名字不一样。下面是 NeoBundle 命令的用法:

  • :NeoBundleUpdate:安装或升级插件,如果你手动把一个插件的目录删除了,这个命令会重新安装这个插件。在这个命令后面加上插件名称,就只升级一个插件;不加参数,会将所有己安装但没被记录在案的插件给记录下来。:NeoBundleInstall 命令效果相同。
  • :NeoBundle {REPOSITORY URI} [[REVISION}] [,OPTIONS}]]:将一个插件锁定到固定版本,防止胡乱升级。
  • :NeoBundleList:列出所有未初始化的插件。
  • :NeoBundleClean:进入交互界面,删除插件。

这些命令在配合 unite.vim (LCTT:就是上面举过的32个例子之一)使用时,效果会稍微有些出入。你可以使用“:help neobundle”命令了解更多信息。

是否使用 NeoBundle,自己决定

NeoBundle 是强大的工具,正处于高速开发状态。任何处于这种状态的项目,都会被帖上“有前途”和“不稳定”两个标签,看你自己怎么选。如果你想要最新的稳定版本的插件,NeoBundle 能够把 Vundle 和 Pathogen 甩出几条街。

然而在线帮助文档已经给出警告,它不是个稳定的产品,不及时更新版本可能造成一些插件运行出错。最后,你需要在 .vimrc 文件为你的 Neoundle 和其他插件指定一个稳定的版本。记住这警告,然后你可以在使用这些尖端技术产品时游刃有余。


via: http://www.openlogic.com/wazi/bid/348084/Managing-Vim-extensions-with-NeoBundle

译者:bazz2 校对:wxy

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

来源:https://linux.cn/article-3433-1.html

Linux:如何用sosreport在Linux上创建诊断报告

SosreportRHEL / CentOS上的一个命令,它会收集系统配置和你linux机器上的诊断信息,如正在运行的内核版本、加载的模块和系统和服务配置文件之类的信息。这个命令同样可以运行外部的程序来收集更多的信息,并存储这些输出到一个结论文档中。

Sosreport在你需要获得redhat的技术支持时需要它。Redhat的支持工程师会要求你服务器上的sosreport来用于故障排除。

Linux:如何用sosreport在Linux上创建诊断报告
Linux:如何用sosreport在Linux上创建诊断报告

要运行sosreport,需要安装sos 包。sos包是大多是linux的默认安装包中的一部分。如果因为某种原因没有安装,那么运行下面的yum命令来安装sos 包 :

# yum install sos

生成报告

打开终端输入sosreport命令:

# sosreport

这条命令正常情况下会在几分钟里完成。根据本地配置,在某些情况下,某些选项可能需要更长的时间才能完成。一旦完成,sosreport将在/ tmp目录目录中生成一个压缩文件。不同版本使用不同的压缩方案(** gz,bz2,或xz**)。该文件应提供给红帽的支持代表(在开放的情况下通常作为附件)。

注意:sosreport需要root权限才能运行。

sosreport命令中不同的选项:

sosreport命令有一个模块化结构,并允许用户启用和禁用模块,并通过在命令行指定模块。要列出可用的模块(插件),请使用以下命令:

# sosreport -l

要禁用一个模块,用逗号隔开的列表传给-n/–skip-plugins选项。比如要kvmand 、amd这两个模块:

# sosreport -n kvm,amd

各个模块可以通过-k选项提供额外的选项。例如,在Red Hat Enterprise Linux 5中安装的sos rpm模块默认收集“rpm -Va”的输出。因为这是个耗时行为,因此可以通过下面的命令禁用:

# sosreport -k rpm.rpmva=off

via: http://www.linuxtechi.com/how-to-create-sosreport-in-linux/

译者:geekpi 校对:wxy

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

来源:https://linux.cn/article-3436-1.html

Linux:[小白技巧]如何在Ubuntu 14.04中添加多个时区时间

如果你需要和多时区时间打交道的话,你一定希望你的电脑时钟可以显示多个时区的时间。作为一个移居国外的人,我需要关注法国和印度的时间。在Ubuntu系统中,你可以进行简易的设置来添加多时区时间。

在这次的使用技巧中,我们会了解到 如何在Ubuntu 14.04系统中添加多时区时间

在Ubuntu 14.04系统中添加多时区时间

打开系统设置(按下标有微软徽标的按键,在Dash中搜索“系统设置”),进入“时间&日期”选项。

接下来,进入时钟标签页,找到其他时区时间选项,然后点击选择地区按钮。

Add multiple timezones in Ubuntu

在新打开的窗口中,你可以输入一个地区,之后相应的结果会在下面显示出来。选择你想添加的地区,然后点击下面的加号标志(+)来添加。

Adding timezone in Ubuntu

完成了这些工作之后,你就可以在系统时钟处看到其他地区的时间了。

multiple timezone displayed in Ubuntu 14.04

体验下Ubuntu多时区时钟给你带来的便捷吧。:)


关于 Abhishek

我叫Abhishek Prakash,是It’s F.O.S.S的创始人。我获得了通信系统工程硕士学位。我是一个狂野的Linux爱好者和开源痴迷者。我在使用Ubuntu系统并且希望和大家分享知识和经验。出了Linux,我还很喜欢经典侦探悬疑电影。我是阿加莎-克里斯蒂的超级粉丝。你可以在Google Plus上添加我到你的好友圈,也可以在twitter上关注 @abhishek_pc


via: http://itsfoss.com/add-multiple-timezones-ubuntu-1404/

译者:JonathanKang 校对:wxy

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

来源:https://linux.cn/article-3437-1.html

Linux:使用 shutter 对网站进行截屏

看了一个文章( http://linux.cn/article-3140-1.html),用gnome-web-photo可以对网页进行截屏,但我试了好几把,总是无法成功。

我的环境是 UBUNTU 10.04,当使用gnome-web-photo的时候,命令行总是处于假死的状态,不能成功的执行命令。要关闭终端的时候,却总显示在运行。

所以,我只好绕道走了。

用shutter实现了我的需求。

sudo apt-get install shutter
sudo apt-get install gnome-web-photo

打开shutter

Linux:使用 shutter 对网站进行截屏
Linux:使用 shutter 对网站进行截屏
输入地址 截屏效果

来源:https://linux.cn/article-3448-1.html

Linux:命令行星期二——第四部分

大家好。新的一周,新的冒险!

今天,我们将会学习使用四个相当简单的命令去操作文件。好,废话少说,我们开始吧。

在开始学习这些命令之前,我们先稍微说些题外话,讲讲“通配符”的用处。

通配符

使用图形工具区复制、粘贴、新建目录等操作也许很容易,但是若想完成一些更复杂的任务,例如仅仅将一个目录下的所有.html文件复制到另一个目录中、或者只复制在某个目录中不存在的文件,这时命令行也许会比较方便。我们回到通配符的学习中,通配符是shell的基本功能,它是一个由一些特殊字符组成的集合,它让你可以用一些简单的规则来选择出某些文件。(通配符可以出现在文件名中,用于指定文件名的字符个数和字母的大/小写等规则)。

Linux:命令行星期二——第四部分
Linux:命令行星期二——第四部分

如下表 :

Linux:命令行星期二——第四部分
Linux:命令行星期二——第四部分

下面是肖茨先生给出的一些实例,如下表:

Linux:命令行星期二——第四部分
Linux:命令行星期二——第四部分

如果你使用一个包含文件名参数的命令,你就可以使用通配符。

cp

cp是一个用于复制文件或者目录的命令,它的用法相当的简单。进入到你想复制的文件所在的目录,然后使用如下命令

cp file1 file2 -复制一个文件

或者

cp file1 file2 … directory -从当前工作目录复制多个文件到指定的目录。

下表是肖茨先生给出的cp命令的一些选项:

Linux:命令行星期二——第四部分
Linux:命令行星期二——第四部分

mv

mv是今天的第二个命令,我们可以使用mv来重命名一个文件或目录,或者移动一个文件或目录。我们可以这样使用mv命令。

mv filename1 filename2 -若想将文件filename1重命名为filename2。

或者

mv file directory -若想将一个文件移动到某个目录。

下表是一些mv命令的实例

Linux:命令行星期二——第四部分
Linux:命令行星期二——第四部分

rm

rm命令是用于删除文件或目录,它的用法比较直接,如下:

rm file

或者

rm -r driectory

这里也有一个包含rm其他选项的表

Linux:命令行星期二——第四部分
Linux:命令行星期二——第四部分

但是,使用rm命令时要小心点。因为并没有撤销删除的选项,因此使用rm命令式要格外的小心,避免对你的系统造成不必要的破坏。

mkdir

mkdir是用于创建目录.它是今天最简单的一个命令:

mkdir directory

看,目录成功创建了!

这是本周的内容,下周二再见,致以最真诚的问候!


via: https://news.opensuse.org/2014/07/08/command-line-tuesdays-part-four/

译者:cvsher 校对:wxy

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

来源:https://linux.cn/article-3450-1.html

Linux:Betty:和你的Linux说说话

Betty 是一个将类英语短语翻译成Linux命令的开源工具。这个项目的主要目的是让大家可以通过输入自然语言来使用强大的Linux系统。让我们来看一下它是怎么工作的。

安装

Betty的安装非常简单直接。首先确认你已经安装了下面这些依赖包[LCTT译注,需要安装至少Ruby1.9以上版本]。

对于基于Debian的系统:

sudo apt-get install git curl ruby

对于基于RPM的系统:

yum install git curl ruby

现在用git工具把Betty库clone到你自定义的任何路径。这里我克隆到我的home目录,例如 /home/sk/.

git clone https://github.com/pickhardt/betty

添加betty的别名到你的bashrc配置文件。

sudo nano ~/.bashrc

将下列行添加到文件的末尾:

alias betty="/home/sk/betty/main.rb"

确保你已经正确地设置好了betty的路径。

好了,现在是时候和betty好好地玩耍了。

用法

你应该在英语短语之前加上单词“betty” [LCTT译注,你自然可以用你的小甜心的名字来替换这个不是知道是谁的Betty :>]。你也许已经知道,如果我们想知道在系统中我们的用户名,应该运行下面的命令:

whoami

输出是这样的:

sk

如你所见,我当前登录的用户名是 sk. 现在我也可以通过下面的betty命令获取相同的结果。

betty whats my username

输出是这样的:

Betty: Running whoami
sk

真的好酷,是不是?Betty理解我输入的“whats my username”短语,然后运行“whoami”命令,最后输出结果。

让我们也来看其他命令。

如果你的输入不够准确,Betty也能以多种方式回应你。例如,我们运行下面的命令:

betty whats my name

Betty不确定她应该查找系统用户名还是用户全名。这种情况下,她会询问你多个问题来找到准确的结果。如你下面所见,Betty问我想要运行哪一条命令(whoami 还是 finger $(whoami) | sed ‘s/.://;q’)[LCTT译注,需要你的系统已经安装finger]。我只想知道我的用户名,所以我选择数字1

Betty: Okay, I have multiple ways to respond.
Betty: Enter the number of the command you want me to run, or N (no) if you don't want me to run any.
[1] whoami
Gets your system username.
[2] finger $(whoami) | sed 's/.*: *//;q'
Gets your full name.
1
Betty: Running whoami
sk

压缩和解压缩文件夹

如果你想要压缩一个文件或者文件夹,用下面的命令。例如,我想压缩我home目录下的“test”文件夹。

betty compress test/ test.tar.gz

输出是这样的:

Betty: Running tar -czvf test.tar.gz test/
test/
test/home/
test/home/sk/
test/home/sk/test/
test/home/sk/test/sample

类似的,我们可以用下面的命令来解压缩一个归档文件。

betty uncompress test.tar.gz

输出是这样的:

Betty: Running mkdir test &&  tar -zxvf test.tar.gz -C test
test/
test/home/
test/home/sk/
test/home/sk/test/
test/home/sk/test/sample

完整的Betty命令行列表

Betty工具有一些命令格式。如果你输入“what is my user name”而不是“whats my username”,它是不能识别的。所以,你只能输入Betty支持的英语短语。

下面给出一个Betty支持的完整的命令行列表。

Count:
betty how many words are in this directory
betty how many characters are in myfile.py
betty count lines in this folder
(Note that there's many ways to say more or less the same thing.)
Config:
betty change your name to Joe
betty speak to me
betty stop speaking to me
Datetime:
betty what time is it
betty what is todays date
betty what month is it
betty whats today
Find:
betty find me all files that contain california
Internet:
betty download http://www.mysite.com/something.tar.gz to something.tar.gz
betty uncompress something.tar.gz
betty unarchive something.tar.gz to somedir
(You can use unzip, unarchive, untar, uncompress, and expand interchangeably.)
betty compress /path/to/dir
iTunes:
betty mute itunes
betty unmute itunes
betty pause the music
betty resume itunes
betty stop my music
betty next song
betty prev track
betty what song is playing
(Note that the words song, track, music, etc. are interchangeable)
Fun:
betty go crazy
betty whats the meaning of life
...and more that are left for you to discover!
Map:
betty show me a map of mountain view
Meta:
betty what version are you (or just betty version)
betty whats your github again
Permissions:
betty give me permission to this directory
betty give anotheruser ownership of myfile.txt
Process:
betty show me all processes by root containing grep
betty show me all my processes containing netbio
Sizes:
betty show size for myfile.txt
Spotify:
betty play spotify
betty pause spotify
betty next spotify
betty previous spotify
User:
betty whats my username
betty whats my real name
betty whats my ip address
betty who else is logged in
betty whats my version of ruby
Web queries:
betty turn web on
betty please tell me what is the weather like in London

对Linux初级使用者来说,Betty似乎是一个非常nice的工具。希望这个工具对你也会非常有用。

Cheers!

源代码:


via: http://www.unixmen.com/betty-translate-english-phrases-linux-commands/

译者:love_daisy_love 校对:wxy

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

来源:https://linux.cn/article-3453-1.html

Linux:[小白技巧]如何在Linux上检查MySQL数据表的存储引擎类型

提问: 我想要知道我的MySQL数据库是MyISAM还是Innodb类型。我该如何检查MySQL数据库表的类型?

MySQl主要使用两种存储引擎:MyISAM 和 Innodb。MyISAM是非事务的,因此拥有读取更快,然而InnoDB完全支持细颗粒度的事务锁定(比如:commit/rollback)。当你创建一张新的MySQL表时,你要选择它的类型(也就是存储引擎)。如果没有选择,你就会使用与预设置的默认引擎。

如果你想要知道已经存在的MySQL数据表的类型,这里有几种方法达到。

Linux:[小白技巧]如何在Linux上检查MySQL数据表的存储引擎类型
Linux:[小白技巧]如何在Linux上检查MySQL数据表的存储引擎类型

方法一

如果你可以访问phpMyAdmin,你可以从phpMyAdmin找出默认的数据库类型。从phpMyAdmin中选中数据库来查看它的表列表。在“Type”一列的下面,你会看到每个表的数据表类型。

Linux:[小白技巧]如何在Linux上检查MySQL数据表的存储引擎类型
Linux:[小白技巧]如何在Linux上检查MySQL数据表的存储引擎类型

方法二

如果你可以直接登录MySQL服务器,另外一种鉴别存储引擎的方法是登录MySQL服务器后运行下面的MySQL命令:

mysql> SELECT ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'my_database' AND TABLE_NAME = 'my_table';

上面的命令会显示在’mydatabase’数据库中’mytable’表的引擎类型。

方法三

还有一种检查引擎的方法是使用mysqlshow,是一种命令行下的显示数据库信息的工具。mysqlshow在MySQL 客户端安装包中有。要使用mysqlshow,你需要提供MySQL服务器登录凭据。

下面的命令会显示特定的数据库信息。在“Engine”一列下面,你可以看到每个表使用的引擎。

$ mysqlshow -u  -p -i 
Linux:[小白技巧]如何在Linux上检查MySQL数据表的存储引擎类型
Linux:[小白技巧]如何在Linux上检查MySQL数据表的存储引擎类型

via: http://ask.xmodulo.com/check-mysql-storage-engine-type-linux.html

译者:geekpi 校对:wxy

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

来源:https://linux.cn/article-3456-1.html

Linux:如何拯救一台GRUB 2启动失败的Linux电脑

Linux:如何拯救一台GRUB 2启动失败的Linux电脑
Linux:如何拯救一台GRUB 2启动失败的Linux电脑

旧版GRUB我们使用了一段时间了,这个重要的Linux通用引导器的版本已经到了0.97。尽管旧版GRUB有很多的优点,但是它已经有点陈旧了,并且它的开发者也希望添加更多的功能,于是,GRUB 2 时代就要来了。

GRUB 2 做了几个明显的改进。它可以从移动存储设备上启动,并且可以通过配置一个选项来进入系统BIOS。相对于将所有的配置都放到一个配置文件/boot/grub/menu.lst中 (现在默认是/boot/grub/grub.cfg),使用各种脚本来配置会更复杂。你不要直接编辑这个文件,那不是人干的事,太复杂了,我们需要使用其它的脚本来改变。我们卑微的人类可以编辑修改/etc/default/grub文件,它主要是控制Grub菜单的外观。我们还可以修改/etc/grub.d/下的脚本,这些脚本用于启动操作系统、控制外部应用程序,如memtest 、os_prober和theming等等 。./boot/grub/grub.cfg是由/etc/default/grub和/etc/grub.d/*生成的。当你修改了某个地方,你必须要运行update-grub命令来生成它。

好消息是,update-grub脚本可以可靠的检测内核、启动文件,并添加所有的操作系统,自动生成你的启动菜单,所以你不必手动的修改他们。

我们还要学习如何解决两个常见的故障。当启动系统时,它会停在grub>提示上,这是一个完整的GRUB 2命令界面,所以不要惊慌。这意味着GRUB 2依旧可以正常启动和加载normal.mod模块(它和其他模块分别位于/boot/grub/[架构]/ 下),但没有找到你的grub.cfg文件。如果你看到grub rescue> 这意味着它无法找到normal.mod,因此它有可能找不到你的启动文件。

这是如何发生的?因为内核可能改变驱动器分区号码的分配,或者您移动了您的硬盘驱动器,或者你手动改变一些分区,也有可能是安装一个新的操作系统或者移动一些文件。在这些情况下你的启动文件仍然存在,但GRUB不能找到他们。所以你可以在GRUB提示符中找到启动文件,设置它们的位置,然后启动您的系统并修复GRUB配置。

GRUB 2 命令行

GRUB 2 的命令界面和上一代GRUB中的一样强大。你可以用它来找到引导镜像,内核和根文件系统。事实上,它可以让你避开权限和其它访问控制,完全访问本地计算机上的所有文件。有些人可能会认为这是一个安全漏洞,但是你知道古老的UNIX的名言:有物理访问机器权限的人,就是拥有它的人。

当你在grub >提示时,你有许多类似命令行界面的功能,如命令历史和tab补全。但是grub rescue>模式是受限的,没有命令历史,没有tab补全。

如果你是在一个正常运作的系统上练习,那就当GRUB菜单出现时,可以按下C来打开GRUB命令行界面。你可以通过向上和向下光标键滚动你的菜单条目来停止启动倒计时。在GRUB命令行下做实验是安全的,因为做不了永久的修改,一切都是暂时的。如果你已经看到grub >或grub rescue>提示符,那就说明你的表现时刻到了。

接下来的几个命令可以在grub>和grub rescue模式下运行。你应该运行的第一个命令是设置一个分页器,将长的命令分页。如下:

grub> set pager=1

等号两侧必须不能出现空格。现在让我们做一点探索。输入ls来列出的GRUB识别的所有分区:

grub> ls
(hd0) (hd0,msdos2) (hd0,msdos1)

msdos是什么?这意味着该系统具有老式的MS-DOS分区表,而不是全新的全局唯一标识符的分区表(GPT)。参见“在Linux下使用新的GUID分区表,和古老的MBR说再见!”。如果你正在运行的GPT,它会出现(hd0,GPT1)。现在让我们看看,使用ls命令查看你的系统里面有什么文件:

grub> ls (hd0,1)/
lost+found/ bin/ boot/ cdrom/ dev/ etc/ home/  lib/
lib64/ media/ mnt/ opt/ proc/ root/ run/ sbin/
srv/ sys/ tmp/ usr/ var/ vmlinuz vmlinuz.old
initrd.img initrd.img.old

太好了,我们已经找到了根文件系统。你可以省略msdos和GPT的标签。如果没有加分区后面的斜杠/,则只会列出分区的信息。你可以用cat命令显示文件系统上的任何文件:

grub> cat (hd0,1)/etc/issue
Ubuntu 14.04 LTS n l

在一个多引导系统上,通过/etc/issue文件可以知道这是哪个Linux系统。

从 grub> 中启动

下面讲述如何设置启动文件并从grub >提示下启动系统。我们已经知道如何从Linux根文件系统(hd0,1)下运行ls命令,你可以一直寻找直到找到你的/boot/grub所在位置。然后运行以下命令,记得使用您自己的根分区,内核和initrd映像等参数:

grub> set root=(hd0,1)
grub> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1
grub> initrd /boot/initrd.img-3.13.0-29-generic
grub> boot

第一行设置分区的根文件系统。第二行告诉GRUB您想要使用的内核位置。开始输入/boot/vmli,然后使用tab补完填写。输入root= /dev/sdX设置根文件系统位置。是的,这似乎是多余的,但如果你忘记了输入,你会得到一个kernel panic。你知道怎么找到正确的分区吗?hd0,1 即 /dev/sda1,hd1,1 即 /dev/sdb1,hd3,2 即 /dev/ sdd2。我想你可以自己推算剩下的了。

第三行设置initrd文件,必须是和内核相同的版本号。

最后一行启动系统。

在一些Linux系统上,内核和initrd是被符号链接到当前的根文件系统的根目录,就像:

$ ls -l /
vmlinuz -> boot/vmlinuz-3.13.0-29-generic
initrd.img -> boot/initrd.img-3.13.0-29-generic

所以,你也可以这样输入命令:

grub> set root=(hd0,1)
grub> linux /vmlinuz root=/dev/sda1
grub> initrd /initrd.img
grub> boot

从grub rescue> 中启动

如果你处在grub rescue> 命令界面下,命令有所不同,你必须要先加载两个模块normal.mod 和 linux.mod。

grub rescue> set prefix=(hd0,1)/boot/grub
grub rescue> set root=(hd0,1)
grub rescue> insmod normal
grub rescue> normal
grub rescue> insmod linux
grub rescue> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1
grub rescue> initrd /boot/initrd.img-3.13.0-29-generic
grub rescue> boot

在你加载了这两个模块之后tab补完的功能就可以用了。

永久性的修复

当你成功地启动你的系统,运行这些命令来永久修复GRUB:

# update-grub
Generating grub configuration file ...
Found background: /usr/share/images/grub/Apollo_17_The_Last_Moon_Shot_Edit1.tga
Found background image: /usr/share/images/grub/Apollo_17_The_Last_Moon_Shot_Edit1.tga
Found linux image: /boot/vmlinuz-3.13.0-29-generic
Found initrd image: /boot/initrd.img-3.13.0-29-generic
Found linux image: /boot/vmlinuz-3.13.0-27-generic
Found initrd image: /boot/initrd.img-3.13.0-27-generic
Found linux image: /boot/vmlinuz-3.13.0-24-generic
Found initrd image: /boot/initrd.img-3.13.0-24-generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
done
# grub-install /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.

当你运行 grub-install 时,记得GRUB是安装到整个硬盘驱动器的主引导扇区而不是到一个具体分区,所以不要加上像/dev/sda1一样的分区号。

如果还是不能使用

如果你的系统是如此的倒霉,而且这个方式没有能起作用,那就尝试超级GRUB2现场救援磁盘吧。官方GNU GRUB手册也应该有所帮助。


via: http://www.linux.com/learn/tutorials/776643-how-to-rescue-a-non-booting-grub-2-on-linux

译者:MikeCoder 校对:wxy

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

来源:https://linux.cn/article-3457-1.html

Linux:如何屏蔽Canvas指纹跟踪

研究人员发现,有许多流行网站正在使用一种难以被屏蔽的在线跟踪技术: AddThis  Canvas指纹跟踪。

Linux:如何屏蔽Canvas指纹跟踪
Linux:如何屏蔽Canvas指纹跟踪

这项跟踪技术是基于一个事实:相同的HTML5 Canvas元素在不同的浏览器上产生出独特的可作为指纹使用的像素——因为浏览器可能使用了不同的图像处理引擎、输出选项和压缩水平,操作系统在抗锯齿和子像素渲染上可能使用了不同的算法和设置。

感兴趣的用户可以访问browserleaks.com测试浏览器是否支持 Canvas,是否容易受到Canvas指纹的跟踪。

Linux:如何屏蔽Canvas指纹跟踪
Linux:如何屏蔽Canvas指纹跟踪

Canvas指纹跟踪并不难屏蔽,Tor项目早在2012年就在Tor Browser Bundle中实现了Canvas指纹屏蔽器,电子前哨基金会称,它最近更新了Privacy Badger扩展,将能屏蔽AddThis 跟踪器和其它基于社交媒体的跟踪器。禁用JavaScript或使用NoScrip扩展也能屏蔽此类跟踪。

来源:http://www.solidot.org/story?sid=40457

Linux:已经会用Git了?不会这十招怎么行

之前我们发了一些教程让你熟悉Git基础在团队合作环境中使用Git.我们讨论的这些Git命令足够让一个开发者在Git的世界里生存下去。在这篇教程里,我们试着探索如何高效地管理你的时间以及如何充分利用Git提供的特性。

Linux:已经会用Git了?不会这十招怎么行
Linux:已经会用Git了?不会这十招怎么行

注意:这里介绍的命令中有的包含方括号(例如:git add -p [file_name])。在这些例子中,你应该用你自己的数字、标识符等替代方括号里的内容,并且去掉方括号。

1. Git自动补全

如果你在命令行环境中运行Git命令,每次都手动地逐个输入命令是一件很无聊的事。为此,你可以花几分钟时间配置一下Git命令的自动补全功能。

在*nix系统运行下列命令下载自动补全脚本:

cd ~
curl https://raw.github.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash

然后,添加下面的行到你的~/.bash_profile文件:

if [ -f ~/.git-completion.bash ]; then
    . ~/.git-completion.bash
fi

尽管我之前已经提到过,但我还是想再强调一下:如果你想使用完整的Git特性,你绝bi应该切换到命令行环境。

2. 在Git中忽略文件

你是不是对出现在你Git库里面的编译生成文件(比如.pyc)感到很无语?或者你是不是很厌恶不小心将他们添加到了Git?直接看这里,这里有一个方法可以让你告诉Git忽略所有这些文件和目录。只需要创建一个名字为.gitignore的文件,里面列出你不想要Git跟踪的文件和目录。可以用感叹号(!)列出例外情况。

*.pyc
*.exe
my_db_config/
!main.pyc

3. 谁动了我的代码?

当事情出了乱子时立马责怪别人这是人类的天性。如果你的服务器程序不能正常工作了,要找出罪魁祸首是非常简单的–只需要执行git blame。这个命令告诉你文件里的每一行的作者是谁,最后改动那一行的提交,以及提交的时间戳。

git blame [file_name]

git blame demonstration

在下面的截图里,你可以看到在一个更大的库里这个命令的输出是什么样的:

Linux:已经会用Git了?不会这十招怎么行
Linux:已经会用Git了?不会这十招怎么行

4. 查看库的历史

在之前的教程里,我们已经看过了如何使用git log命令。不管怎样,有3个选项你应该知道。

  • –oneline – 压缩每次的提交信息,只保留一个缩减的Hash值和说明文字,然后把这些都展示在一行里。
  • –graph – 这个选项将在左边画出一个文字界面的提交历史图。如果你只有一个分支,用这个选项查看历史时是没什么意义的。
  • –all – 显示所有分支历史。

这是这3个选项合起来使用的效果:

Linux:已经会用Git了?不会这十招怎么行
Linux:已经会用Git了?不会这十招怎么行

5. 不要丢失对某个提交的跟踪

假设你提交了一些不需要的东西,然后你进行了hard重置回到之前的状态。后来,你发现在这个过程中你丢失了其他一些重要的信息,你想要把这些信息找回来,或者至少可以查看一下这些信息。这就需要git reflog帮忙。

简单的git log只能告诉你最近的提交,这个提交的父提交,父提交的父提交,等等。但是git reflog是一个HEAD指向的提交的列表。记住,这个列表依赖于你自己的本地操作环境,它不是库的一部分,也不包含在push或者merge中。

如果执行git log命令,可以看到提交历史,这是我的库的一部分:

Linux:已经会用Git了?不会这十招怎么行
Linux:已经会用Git了?不会这十招怎么行

但是,git reflog命令显示了一个被我用hard重置丢掉的提交(b1b0ee9-HEAD@{4}).

Linux:已经会用Git了?不会这十招怎么行
Linux:已经会用Git了?不会这十招怎么行

来源:https://linux.cn/article-3463-1.html

Linux:shell脚本中的"2< " ">&2" "&>"

Linux:shell脚本中的"2< "  ">&2"  "&>"
Linux:shell脚本中的"2< " ">&2" "&>"

linux标准文件描述符:

文件描述符 缩写 描述
0 STDIN 标准输入
1 STDOUT 标准输出
2 STDERR 标准错误

标准输入和标准输出指的就是键盘和显示器。

当文件描述符(0,1,2)与重定向符号(<)组合之后,就可以重新定向输入,输出,及错误。

  • command    2>file1
    •    命令执行的错误信息保存到了file1文件中。显示屏只是显示正确的信息。
  • command    1>file1  2>file2 
    •    命令执行后,没有显示。因为正确输出到file1,错误定向到file2
  • command    &>file1
    • 命令执行后,输出和错误都定向到file1中

在shell脚本中,可以定义“错误”输出到STDERR指定的文件.需要在重定向符和文件描述符之间加一个and符(&)

cat test
#!/bin/bash
echo " this is ERROR "   >&2
echo  "this is output"
$

运行脚本

[root@localhost ~]# ./test 2>file1
this is output
[root@localhost ~]# cat file1
this is ERROR 

可以再脚本中使用exec命令:

exec 1>file1
exec 2>file2
echo " this is ERROR "   >&2
echo  "this is output"

运行如上脚本,则输出都在file1和file2中。

也可以使用exec 0

Linux:怎样把坏的MySQL查询找到并杀死?

有时,关系型相关数据库系统的复杂性会把你搞晕,不过幸运的是,使用MySQL工具来管理查询就就可以避免这些复杂性。 在本教程中,我将向你们展示 怎样去查找并杀掉任何非法的MySQL查询

Linux:怎样把坏的MySQL查询找到并杀死?
Linux:怎样把坏的MySQL查询找到并杀死?

为了浏览当前正在运行的查询,登陆到MySQL终端,然后运行‘show processlist’命令:

mysql> show processlist;
+--------+--------+-----------------+---------+---------+-------+-------+------------------+-----------+---------------+-----------+
| Id     | User   | Host            | db      | Command | Time  | State | Info             | Rows_sent | Rows_examined | Rows_read |
+--------+--------+-----------------+---------+---------+-------+-------+------------------+-----------+---------------+-----------+
|  78233 | root   | 127.0.0.1:37527 | mysql   | Sleep   | 16474 |       | NULL             |         6 |             6 |         6 |
|  84546 | root   | 127.0.0.1:48593 | mysql   | Sleep   | 13237 |       | NULL             |         2 |             2 |         2 |
| 107083 | root   | 127.0.0.1:56451 | mysql   | Sleep   | 15488 |       | NULL             |         1 |           121 |       121 |
| 131455 | root   | 127.0.0.1:48550 | NULL    | Query   |     0 | NULL  | show processlist |         0 |             0 |         0 |
+--------+--------+-----------------+---------+---------+-------+-------+------------------+-----------+---------------+-----------+
4 rows in set (0.03 sec)

首先你应该查看’Time’项,这里记录了进程执行 “做其当做的事情” 操作的秒数。‘command’项处于‘Sleep’ 状态的进程表示其正在等待接受查询,因此,它并没有消耗任何资源。对于其他任何进程而言,‘Time’超过一定的秒数表明出现问题。

在上面的例子中,唯一运行的查询是我们的‘show processlist’命令。让我们来看看如果我们有一个写的很烂的查询是怎么样的:

mysql> show processlist;
+--------+--------+-----------------+-----------+---------+-------+--------------+----------------------------------+-----------+---------------+-----------+
| Id     | User   | Host            | db        | Command | Time  | State        | Info                             | Rows_sent | Rows_examined | Rows_read |
+--------+--------+-----------------+-----------+---------+-------+--------------+----------------------------------+-----------+---------------+-----------+
|  78233 | root   | 127.0.0.1:37527 | example   | Sleep   | 18046 |              | NULL                             |         6 |             6 |         6 |
|  84546 | root   | 127.0.0.1:48593 | example   | Sleep   | 14809 |              | NULL                             |         2 |             2 |         2 |
| 107083 | root   | 127.0.0.1:56451 | example   | Sleep   | 17060 |              | NULL                             |         1 |           121 |       121 |
| 132033 | root   | 127.0.0.1:54642 | example   | Query   |    27 | Sending data | select max(subtotal) from orders |         0 |             0 |         0 |
| 133933 | root   | 127.0.0.1:48679 | NULL      | Query   |     0 | NULL         | show processlist                 |         0 |             0 |         0 |
| 134122 | root   | 127.0.0.1:49264 | example   | Sleep   |     0 |              | NULL                             |         0 |             0 |         0 |
+--------+--------+-----------------+-----------+---------+-------+--------------+----------------------------------+-----------+---------------+-----------+
6 rows in set (0.00 sec)

啊哈!现在我们看到有一个查询运行了将近30秒。如果我们不想让它的进程继续运行,可以将它的’Id’传递给kill命令:

mysql> kill 132033;
Query OK, 0 rows affected (0.00 sec)
mysql>

(注意 由于我们没有改变任何数据,MySQL总是报告0行被影响。)

明智的使用kill命令能够清除积压的查询。然而,要记住的是,那不是一种永久的方法 – 如果这些查询来自你的程序,你需要去重写它们,或者将继续看到相同的问题不断出现。

另请参阅

关于不同‘命令’的MySQL文档:


via: http://xmodulo.com/2014/07/find-kill-misbehaving-mysql-queries.html

译者:hunanchenxingyu 校对:wxy

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

来源:https://linux.cn/article-3469-1.html

Linux:[小技巧]如何在Ubuntu14.04中禁用叠加滚动条

Hello 伙计们,

这是一个如何在Ubuntu中禁用叠加滚动条的小技巧。注意,在本文中讲的不是删除叠加功能,而是告诉你如何启用或禁用它。

禁用

打开终端并执行以下命令

gsettings set com.canonical.desktop.interface scrollbar-mode normal

更改后会立即生效:

启用

gsettings reset com.canonical.desktop.interface scrollbar-mode

Enjoy!


Enock Seth Nyamador

我穿着–[0-0]–(比基尼?), 一个开源的瘾君子。一个发展中的非洲geek。我是一个菜鸟开发者和一个有追求的摄影师。想提供给我什么或者是小贴士,请随时与我联系。我随时准备开发和照片。干杯!


via: http://www.unixmen.com/disable-overlay-scrollbars-ubuntu-14-04-quick-tip/

译者:Vito 校对:校对者ID

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

来源:https://linux.cn/article-3470-1.html

Linux:主流搜索引擎闯入Linux命令行世界

(LCTT译注:这里,我们姑且认为您身处能够访问Internet的地方!)

为什么会有人要从终端搜索互联网上的东西?我不清楚,这里头可能有许多的原因。但是,因为没人要求答案总比没人知道答案少令人失望一点。这里,列出了一些流行的搜索引擎的命令行工具,可以让你们通过Linux终端来访问它们。

1. Google

让我们从一个巨头开始吧:Bing!好吧,只是开个玩笑,事实上应该是Google。坦白讲,你根本不需要使用命令行工具来进行Google搜索。只需要简简单单的一个命令:

$ xdg-open https://www.google.com/search?q="[query]"

它会打开网页浏览器,并转到合适的搜索页面。然而,如果你想要的是从终端窗口查看搜索结果,而不是打开什么网页浏览器,那么我推荐你使用cli-google。它是一个超级老古董了(最后一次更新是在2009年),但我喜欢它。这是一个简单而直接的应用,它会忠实地干好它应该干的事。

安装完cli-google后,你就可以开始用它来搜索了,它的输出是那样的五彩斑斓。你也可以调整搜索结果的数量和你想要的语言,你只需要在终端中敲入:

$ google

就可以看到所有的选项了。

Linux:主流搜索引擎闯入Linux命令行世界
Linux:主流搜索引擎闯入Linux命令行世界

2. YouTube

关于Google,有太多的东西要放进列表来。我会尽量简明扼要,但绝不会放过该有的。对于许多人而言,YouTube是他们快速查找相关内容视频的首选。要在终端中完成此事,我则钟情于mps-youtube。这个软件可以让你在终端中搜索、下载视频,创建播放列表,以及查看关于视频的评论。安装完mps-youtube后,你可以使用下面的命令来启动:

$ mpsyt

然后,输入 h 来查看选项。要查看简明用法,你可以像下面这样:

/[query]

来搜索你想知道的一切,然后输入视频的编号来听听它的声音,或者输入:

i [video-number]

来看看相关信息,也可以输入:

d [video-number]

来下载它。如果你觉得光听还不过瘾,这里还有更好玩的:

set player mplayer
set show_video True

现在,你可以在另外一个窗口里头用mplayer来播放视频了。

Linux:主流搜索引擎闯入Linux命令行世界
Linux:主流搜索引擎闯入Linux命令行世界

3. 维基百科

与Google一样,对于维基百科,我也喜欢一个古老的脚本,它干的不赖:cliWiki。安装完后,赶紧运行一下看看:

$ cliwiki

然后,你就可以输入你想要搜索的内容了。如果有直接匹配的条目,终端中就会显示相关页面了。哈,输出内容可真够长的,建议你还是用less命令来看吧。当然,这不是最高效的方法,但你的母的只是想要查看与关键词相关的文本,那这就是你想要的。

Linux:主流搜索引擎闯入Linux命令行世界
Linux:主流搜索引擎闯入Linux命令行世界

4. 海盗湾

现在,让我们聊聊龌龊的东西。网上有很多意想不到的(也许你不觉得)工具,可以帮助你在命令行下查找海盗湾上的种子。而在这其中,pirate-get是我的最爱。它里面蕴藏了大量的选项,你可以通过下面的命令来发现它们:

$ pirate-get -h

但是还是简单一些吧:

$ pirate-get --color -c [category] [query]

以上命令会返回与查询内容相关的特定搜索类目中的结果,输出结果也是彩色的!那里头,程序会提示你输入你想要的结果的编号,输入后就可以从磁链上下载种子了。简单又容易,仅限于没有版权的资料哦!

Linux:主流搜索引擎闯入Linux命令行世界
Linux:主流搜索引擎闯入Linux命令行世界

5. Twitter

Twitter是迎合潮流的一个很好的搜索引擎。我们已经在如何在命令行中访问Twitter一文中介绍了它的用法,但是我个人更喜欢TTYtter。该工具及其强大,它应该有它自身的一席之地,而不再仅仅用于简单搜索了。但在这里,我只想把它当作搜索引擎使用。安装并配置完后,你就可以登陆进去,并使用下面的命令来搜索了:

/search [query]

界面在视觉上有点粗糙,但是你很快会习惯的。注意,这里头只能用普通的文字,也可以用哈希标记。

Linux:主流搜索引擎闯入Linux命令行世界
Linux:主流搜索引擎闯入Linux命令行世界

最后来小结一下吧,这里列出了我认为人们使用最多5大搜索引擎,这些搜索引擎都可以通过命令行来访问。这里Google图像和Google地图可能缺席了,但我想这些可能不能很好适应控制台环境吧。我也想要寻找一个音乐搜索引擎,但是没有找到对于本列表“有价值的”。就像你可能已经注意到的那样,列表中的工具在功能和选项上是良莠不齐的:其中一些很简单,而另外一些则功能很复杂。但不管怎么说,最后它们都还是完成了它们的任务。

列表中错失了哪些搜索引擎?你还知道哪些没有提到过的工具呢?请在文章评论中告诉我们吧。


Adrien Brochard

我是一位来自法国的Linux爱好者。在尝试了多个发行版后,我最后认可了Archlinux。然而,我一直在试着通过积累一些知识和技巧来改善我的系统。


via: http://xmodulo.com/2014/06/access-popular-search-engines-command-line-linux.html

译者:GOLinux 校对:wxy

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

来源:https://linux.cn/article-3471-1.html

Linux:Linux基础:如何在命令行中查看目录的大小

这是写给Liunx新用户的一系列文章中的第一篇,在这系列文章我将会写一些对新用户来说非常好用的Linux基础命令

注意:本文的目标读者是仅有小量甚至是没有任何Linux命令行使用经验的读者。

作为一个Linux的新用户,我怎样可以在命令行终端中查看某个目录的属性?

要求

唯一的要求是du命令行工具。du基本上是所有Linux发行版本默认提供的工具。用以下的命令来检查你的系统中是否可以使用du命令:

man du

du 命令用于输出文件的空间使用情况。

使用du

不带任何参数的运行du命令会显示当前工作目录以及其子目录的文件名和所占用的空间大小(以字节为单位)。

du
Linux:Linux基础:如何在命令行中查看目录的大小
Linux:Linux基础:如何在命令行中查看目录的大小

使用-h参数以对用户友好的方式输出文件大小,即分别以K, MG来表示Kb,MbGb

du -h
Linux:Linux基础:如何在命令行中查看目录的大小
Linux:Linux基础:如何在命令行中查看目录的大小

若想查看某个特定目录的文件大小,则在du命令中指定要查看的目录名,如下:

du -h Mapmaker
Linux:Linux基础:如何在命令行中查看目录的大小
Linux:Linux基础:如何在命令行中查看目录的大小

使用 -c 参数来查看目录所占用磁盘空间的总大小

du -ch
Linux:Linux基础:如何在命令行中查看目录的大小
Linux:Linux基础:如何在命令行中查看目录的大小

使用 -s 参数只输出指定目录占用空间的大小

du -sh Mapmaker Sandbox
Linux:Linux基础:如何在命令行中查看目录的大小
Linux:Linux基础:如何在命令行中查看目录的大小

使用 man du 查看du命令更多参数的用法

man du
Linux:Linux基础:如何在命令行中查看目录的大小
Linux:Linux基础:如何在命令行中查看目录的大小

知道du命令更多的用法?请分享给我和其他人。


via: http://www.unixmen.com/linux-basics-find-size-directory-commands/

译者:cvsher 校对:wxy

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

来源:https://linux.cn/article-3473-1.html

Linux:Linux内核Crash分析

       在工作中经常会遇到一些内核crash的情况,本文就是根据内核出现crash后的打印信息,对其进行了分析,使用的内核版本为:Linux2.6.32。

       每一个进程的生命周期内,其生命周期的范围为几毫秒到几个月。一般都是和内核有交互,例如用户空间程序使用系统调用进入内核空间。这时使用的不再是用户空间的栈空间,使用对应的内核栈空间。对每一个进程来说,Linux内核都会把两个不同的数据结构紧凑的存放在一个单独为进程分配的存储空间中:一个是内核态的进程堆栈,另一个是紧挨进程描述符的数据结构thread_info,叫线程描述符。内核的堆栈大小一般为8KB,也就是8192个字节,占用两个页。在Linux-2.6.32内核中thread_info.h文件中有对内核堆栈的定义:

#define THREAD_SIZE               8192

          在Linux内核中使用下面的联合结构体表示一个进程的线程描述符和内核栈,在内核中文件include/linux/sched.h。

union thread_union {
  struct thread_info thread_info;
  unsigned long stack[THREAD_SIZE/sizeof(long)];
};

          该结构是一个联合体,我们在C语言书上看到过关于union的解释,在在C Programming Language 一书中对于联合体是这么描述的:

1) 联合体是一个结构;

2) 它的所有成员相对于基地址的偏移量都为0;

3) 此结构空间要大到足够容纳最”宽”的成员;

4) 其对齐方式要适合其中所有的成员;

         通过上面的描述可知,thread_union结构体的大小为8192个字节。也就是stack数组的大小,类型是unsigned long类 型。由于联合体中的成员变量都是占用同一块内存区域,所以,在平时写代码时总有一个概念,对一个联合体的实例只能使用其中一个成员变量,否则会把原先变量 给覆盖掉,这句话如果正确的话,必须要有一个前提假设,成员占用的字节数相同,当成员所占的字节数不同时,只会覆盖相应的字节。对于thread_union联合体,我们是可以同时访问这两个成员,只要能够正确获取到两个成员变量的地址。

         在内核中的某一个进程使用了过多的栈空间时,内核栈就会溢出到thread_info部分,这将导致严重的问题(系统重启),例如,递归调用的层次太深;在函数内定义的数据结构太大。

Linux:Linux内核Crash分析
Linux:Linux内核Crash分析

图:进程中thread_info    task_struct和内核栈中的关系

         下面我们看一下thread_info的结构体:

struct thread_info {
  unsigned long           flags;           /* 底层标志,*/
  int                     preempt_count;   /* 0 => 可抢占, <0 => bug */
  mm_segment_t            addr_limit;      /* 进程地址空间 */
  struct task_struct      *task;           /*当前进程的task_struct指针 */
  struct exec_domain      *exec_domain;    /*执行区间 */
  __u32                   cpu;             /* 当前cpu */
  __u32                   cpu_domain;      /* cpu domain */
  struct                  cpu_context_save  cpu_context;    /* cpu context */
  __u32                   syscall;         /* syscall number */
  __u8                    used_cp[16];     /* thread used copro */
  unsigned long           tp_value;
  struct crunch_state     crunchstate;
  union fp_state          fpstate __attribute__((aligned(8)));
  union vfp_state         vfpstate;
#ifdef CONFIG_ARM_THUMBEE
  unsigned long           thumbee_state;       /* ThumbEE Handler Base register */
#endif
  struct restart_block     restart_block; /*用于实现信号机制*/
};

 PS:(1)flag 用于保存各种特定的进程标志,最重要的两个是:TIF_SIGPENDING,如果进程有待处理的信号就置位,TIF_NEED_RESCHED表示进程应该需要调度器选择另一个进程替换本进程执行。

         结合上面的知识,看下当内核打印堆栈信息时,都打印了上面信息。下面的打印信息是工作中遇到的一种情况,打印了内核的堆栈信息,PC指针在dev_get_by_flags中,不能访问的内核虚地址为45685516,内核中一般可访问的地址都是以0xCXXXXXXX开头的地址。

Unable to handle kernel paging request at virtual address 45685516
pgd = c65a4000
[45685516] *pgd=00000000
Internal error: Oops: 1 [#1]
last sysfs file: /sys/devices/form/tpm/cfg_l3/l3_rule_add
Modules linked in: splic mmp(P)
CPU: 0    Tainted: P            (2.6.32.11 #42)
PC is at dev_get_by_flags+0xfc/0x140
LR is at dev_get_by_flags+0xe8/0x140
pc : []    lr : []    psr: 20000013
sp : c07e9c28  ip : 00000000  fp : c07e9c64
r10: c6bcc560  r9 : c646a220  r8 : c66a0000
r7 : c6a00000  r6 : c0204e56  r5 : 30687461  r4 : 45685516
r3 : 00000000  r2 : 00000010  r1 : c0204e56  r0 : ffffffff
Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
Control: 0005397f  Table: 065a4000  DAC: 00000017
Process swapper (pid: 0, stack limit = 0xc07e8270)
Stack: (0xc07e9c28 to 0xc07ea000)
9c20:                   c0204e56 c6a00000 45685516 c69ffff0 c69ffff0 c69ffff0
9c40: c6a00000 30687461 c66a0000 c6a00000 00000007 c64b210c c07e9d24 c07e9c68
9c60: c071f764 c06bed38 c66a0000 c66a0000 c6a00000 c6a00000 c66a0000 c6a00000
9c80: c07e9cfc c07e9c90 c03350d4 c0334b2c 00000034 00000006 00000100 c64b2104
9ca0: 0000c4fb c0243ece c66a0000 c0beed04 c033436c c646a220 c07e9cf4 00000000
9cc0: c66a0000 00000003 c0bee8e8 c0beed04 c07e9d24 c07e9ce0 c06e4f5c 00004c68
9ce0: 00000000 faa9fea9 faa9fea9 00000000 00000000 c6bcc560 c0335138 c646a220
9d00: c66a0000 c64b2104 c085ffbc c66a0000 c0bee8e8 00000000 c07e9d54 c07e9d28
9d20: c071f9a0 c071ebc0 00000000 c071ebb0 80000000 00000007 c67fb460 c646a220
9d40: c0bee8c8 00000608 c07e9d94 c07e9d58 c002a100 c071f84c c0029bb8 80000000
9d60: c07e9d84 c0beee0c c0335138 c66a0000 c646a220 00000000 c4959800 c4959800
9d80: c67fb460 00000000 c07e9dc4 c07e9d98 c078f0f4 c0029bc8 00000000 c0029bb8
9da0: 80000000 c07e9dbc c6b8d340 c66a0520 00000000 c646a220 c07e9dec c07e9dc8
9dc0: c078f450 c078effc 00000000 c67fb460 c6b8d340 00000000 c67fb460 c64b20f2
9de0: c07e9e24 c07e9df0 c078fb60 c078f130 00000000 c078f120 80000000 c0029a94
9e00: 00000806 c6b8d340 c0bee818 00000001 00000000 c4959800 c07e9e64 c07e9e28
9e20: c002a030 c078f804 c64b2070 00000000 c64b2078 ffc45000 c64b20c2 c085c2dc
9e40: 00000000 c085c2c0 00000000 c0817398 00086c2e c085c2c4 c07e9e9c c07e9e68
9e60: c06c2684 c0029bc8 00000001 00000040 00000000 c085c2dc c085c2c0 00000001
9e80: 0000012c 00000040 c085c2d0 c0bee818 c07e9ed4 c07e9ea0 c00284e0 c06c2608
9ea0: bf00da5c 00086c30 00000000 00000001 c097e7d4 c07e8000 00000100 c08162d8
9ec0: 00000002 c097e7a0 c07e9f14 c07e9ed8 c00283d0 c0028478 56251311 00023c88
9ee0: c07e9f0c 00000003 c08187ac 00000018 00000000 01000000 c07ebc70 00023cbc
9f00: 56251311 00023c88 c07e9f24 c07e9f18 c03391e8 c0028348 c07e9f3c c07e9f28
9f20: c0028070 c03391b0 ffffffff 0000001f c07e9f94 c07e9f40 c002d4d0 c0028010
9f40: 00000000 00000001 c07e9f88 60000013 c07e8000 c07ebc78 c0868784 c07ebc70
9f60: 00023cbc 56251311 00023c88 c07e9f94 c07e9f98 c07e9f88 c025c3e4 c025c3f4
9f80: 60000013 ffffffff c07e9fb4 c07e9f98 c025c578 c025c3cc 00000000 c0981204
9fa0: c0025ca0 c0d01140 c07e9fc4 c07e9fb8 c0032094 c025c528 c07e9ff4 c07e9fc8
9fc0: c0008918 c0032048 c0008388 00000000 00000000 c0025ca0 00000000 00053975
9fe0: c0868834 c00260a4 00000000 c07e9ff8 00008034 c0008708 00000000 00000000
Backtrace:
[] (dev_get_by_flags+0x0/0x140) from [] (arp_process+0xbb4/0xc74)
 r7:c64b210c r6:00000007 r5:c6a00000 r4:c66a0000

 

         (1)首先,看看这段堆栈信息是在内核中那个文件中打印出来的,在fault.c文件中,__do_kernel_fault函数,在上面的打印中Unable to handle kernel paging request at virtual address 45685516,该地址是内核空间不可访问的地址。

static void __do_kernel_fault(struct mm_struct *mm, unsigned long addr, unsigned int fsr, struct pt_regs *regs)
{
  /*
  * Are we prepared to handle this kernel fault?
  */
  if (fixup_exception(regs))
    return;
  /*
  * No handler, we'll have to terminate things with extreme prejudice.
  */
  bust_spinlocks(1);
  printk(KERN_ALERT
    "Unable to handle kernel %s at virtual address %08lxn",
    (addr < PAGE_SIZE) ? "NULL pointer dereference" :"paging request", addr);
  show_pte(mm, addr);
  die("Oops", regs, fsr);
  bust_spinlocks(0);
  do_exit(SIGKILL);
}

 (2) 对于下面的两个信息,在函数show_pte中进行了打印,下面的打印涉及到了页全局目录,页表的知识,暂时先不分析,后续补上。

pgd = c65a4000
[45685516] *pgd=00000000
void show_pte(struct mm_struct *mm, unsigned long addr)
{
  pgd_t *pgd;
  if (!mm)
    mm = &init_mm;
  printk(KERN_ALERT "pgd = %pn", mm->pgd);
  pgd = pgd_offset(mm, addr);
  printk(KERN_ALERT "[%08lx] *pgd=%08lx", addr, pgd_val(*pgd));
……………………
}

 (3) die函数中调用在die函数中取得thread_info结构体的地址。

struct thread_info *thread = current_thread_info();
static inline struct thread_info *current_thread_info(void){
  register unsigned long sp asm ("sp");
  return (struct thread_info *)(sp & ~(THREAD_SIZE - 1));
}

 Sp: 0xc07e9c28    通过current_thread_info得到 thread_info的地址

(0xc07e9c28 & 0xffffe000) = 0xC07E8000(thread_info的地址,也就是栈底的地址)

(4)下面的打印信息在__die函数中打印

Internal error: Oops: 1 [#1]
last sysfs file: /sys/devices/form/tpm/cfg_l2/l2_rule_add
Modules linked in: splic mmp(P)
CPU: 0    Tainted: P            (2.6.32.11 #42)
PC is at dev_get_by_flags+0xfc/0x140
LR is at dev_get_by_flags+0xe8/0x140
pc : []    lr : []    psr: 20000013
sp : c07e9c28  ip : 00000000  fp : c07e9c64
r10: c6bcc560  r9 : c646a220  r8 : c66a0000
r7 : c6a00000  r6 : c0204e56  r5 : 30687461  r4 : 30687461
r3 : 00000000  r2 : 00000010  r1 : c0204e56  r0 : ffffffff
Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
Control: 0005397f  Table: 065a4000  DAC: 00000017
Process swapper (pid: 0, stack limit = 0xc07e8270)
Stack: (0xc07e9c28 to 0xc07ea000)

          函数的调用关系:die("Oops", regs, fsr);---à    __die(str, err, thread, regs);

下面是__die函数的定义:

static void __die(const char *str, int err, struct thread_info *thread, struct pt_regs *regs){
  struct task_struct *tsk = thread->task;
  static int die_counter;
  /*Internal error: Oops: 1 [#1]*/
  printk(KERN_EMERG "Internal error: %s: %x [#%d]" S_PREEMPT S_SMP "n",
    str, err, ++die_counter);
  /*last sysfs file: /sys/devices/form/tpm/cfg_l2/l2_rule_add*/
  sysfs_printk_last_file();
  /*内核中加载的模块信息Modules linked in: splic mmp(P) */
  print_modules();
  /*打印寄存器信息*/
  __show_regs(regs);
  /*Process swapper (pid: 0, stack limit = 0xc07e8270) tsk->comm  task_struct结构体中的comm表示的是除去路径后的可执行文件名称,这里的swapper为idle进程,进程号为0,创建内核进程init;其中stack limit = 0xc07e8270  指向thread_info的结束地址。*/
  printk(KERN_EMERG "Process %.*s (pid: %d, stack limit = 0x%p)n",
    TASK_COMM_LEN, tsk->comm, task_pid_nr(tsk), thread + 1);
  /* dump_mem 函数打印从栈顶到当前sp之间的内容*/
  if (!user_mode(regs) || in_interrupt()) {
    dump_mem(KERN_EMERG, "Stack: ", regs->ARM_sp, THREAD_SIZE + (unsigned long)task_stack_page(tsk));
    dump_backtrace(regs, tsk);
    dump_instr(KERN_EMERG, regs);
  }
}

          在上面的函数中,主要使用了thread_info,task_struct,sp之间的指向关系。task_struct结构体的成员stack是栈底,也是对应thread_info结构体的地址。堆栈数据是从栈底+8K的地方开始向下存的。SP指向的是当前的栈顶。(unsigned long)task_stack_page(tsk),

#define task_stack_page(task)        ((task)->stack) ,该宏根据task_struct得到栈底,也就是thread_info地址。

#define task_thread_info(task)       ((struct thread_info *)(task)->stack),该宏根据task_struct得到thread_info指针。

(5)dump_backtrace函数

         该函数用于打印函数的调用关系。Fp为帧指针,用于追溯程序的方式,方向跟踪调用函数。该函数主要是fp进行检查,看看能否进行backtrace,如果可以就调用汇编的c_backtrace,在arch/arm/lib/backtrace.S函数中。

static void dump_backtrace(struct pt_regs *regs, struct task_struct *tsk)
{
  unsigned int fp, mode;
  int ok = 1;
  printk("Backtrace: ");
  if (!tsk)
    tsk = current;
  if (regs) {
    fp = regs->ARM_fp;
    mode = processor_mode(regs);
  } else if (tsk != current) {
    fp = thread_saved_fp(tsk);
    mode = 0x10;
  } else {
    asm("mov %0, fp" : "=r" (fp) : : "cc");
    mode = 0x10;
  }
  if (!fp) {
    printk("no frame pointer");
    ok = 0;
  } else if (verify_stack(fp)) {
    printk("invalid frame pointer 0x%08x", fp);
    ok = 0;
  } else if (fp < (unsigned long)end_of_stack(tsk))
    printk("frame pointer underflow");
    printk("n");
    if (ok)
      c_backtrace(fp, mode);
}

 (6)dump_instr

根据PC指针和指令mode, 打印出当前执行的指令码

Code: 0a000008 e5944000 e2545000 0a000005 (e4153010)

Linux:Linux内核Crash分析
Linux:Linux内核Crash分析

内核中函数的调用关系

来源:http://blog.chinaunix.net/uid-20788636-id-4377271.html

Linux:LINUX上MYSQL优化三板斧

现在MySQL运行的大部分环境都是在Linux上的,如何在Linux操作系统上根据MySQL进行优化,我们这里给出一些通用简单的策略。这些方法都有助于改进MySQL的性能。

闲话少说,进入正题。

Linux:LINUX上MYSQL优化三板斧
Linux:LINUX上MYSQL优化三板斧

一、CPU

首先从CPU说起。

你仔细检查的话,有些服务器上会有的一个有趣的现象:你cat /proc/cpuinfo时,会发现CPU的频率竟然跟它标称的频率不一样:

#cat /proc/cpuinfo
processor : 5
model name : Intel(R) Xeon(R) CPU E5-2620 0 @2.00GHz
 ...
cpu MHz : 1200.000

这个是Intel E5-2620的CPU,他是2.00G * 24的CPU,但是,我们发现第5颗CPU的频率为1.2G。 

这是什么原因呢?

这些其实都源于CPU最新的技术:节能模式。操作系统和CPU硬件配合,系统不繁忙的时候,为了节约电能和降低温度,它会将CPU降频。这对环保人士和抵制地球变暖来说是一个福音,但是对MySQL来说,可能是一个灾难。

为了保证MySQL能够充分利用CPU的资源,建议设置CPU为最大性能模式。这个设置可以在BIOS和操作系统中设置,当然,在BIOS中设置该选项更好,更彻底。由于各种BIOS类型的区别,设置为CPU为最大性能模式千差万别,我们这里就不具体展示怎么设置了。

二、内存

然后我们看看内存方面,我们有哪些可以优化的。

i) 我们先看看numa

非一致存储访问结构 (NUMA : Non-Uniform Memory Access) 也是最新的内存管理技术。它和对称多处理器结构 (SMP : Symmetric Multi-Processor) 是对应的。简单的队别如下:

Linux:LINUX上MYSQL优化三板斧
Linux:LINUX上MYSQL优化三板斧

如图所示,详细的NUMA信息我们这里不介绍了。但是我们可以直观的看到:SMP访问内存的都是代价都是一样的;但是在NUMA架构下,本地内存的访问和非 本地内存的访问代价是不一样的。对应的根据这个特性,操作系统上,我们可以设置进程的内存分配方式。目前支持的方式包括:

--interleave=nodes
--membind=nodes
--cpunodebind=nodes
--physcpubind=cpus
--localalloc
--preferred=node

简而言之,就是说,你可以指定内存在本地分配,在某几个CPU节点分配或者轮询分配。除非 是设置为–interleave=nodes轮询分配方式,即内存可以在任意NUMA节点上分配这种方式以外。其他的方式就算其他NUMA节点上还有内 存剩余,Linux也不会把剩余的内存分配给这个进程,而是采用SWAP的方式来获得内存。有经验的系统管理员或者DBA都知道SWAP导致的数据库性能 下降有多么坑爹。 

所以最简单的方法,还是关闭掉这个特性。

关闭特性的方法,分别有:可以从BIOS,操作系统,启动进程时临时关闭这个特性。

a) 由于各种BIOS类型的区别,如何关闭NUMA千差万别,我们这里就不具体展示怎么设置了。

b) 在操作系统中关闭,可以直接在/etc/grub.conf的kernel行最后添加numa=off,如下所示:

kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=/dev/mapper/VolGroup-root  rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=VolGroup/root rd_NO_MD quiet  SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto rd_LVM_LV=VolGroup/swap rhgb crashkernel=auto quiet KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM numa=off  

另外可以设置 vm.zone_reclaim_mode=0尽量回收内存。

c) 启动MySQL的时候,关闭NUMA特性:

numactl --interleave=all  mysqld &

当然,最好的方式是在BIOS中关闭。

ii) 我们再看看vm.swappiness。

vm.swappiness是操作系统控制物理内存交换出去的策略。它允许的值是一个百分比的值,最小为0,最大运行100,该值默认为60。vm.swappiness设置为0表示尽量少swap,100表示尽量将inactive的内存页交换出去。

具体的说:当内存基本用满的时候,系统会根据这个参数来判断是把内存中很少用到的inactive 内存交换出去,还是释放数据的cache。cache中缓存着从磁盘读出来的数据,根据程序的局部性原理,这些数据有可能在接下来又要被读 取;inactive 内存顾名思义,就是那些被应用程序映射着,但是“长时间”不用的内存。

我们可以利用vmstat看到inactive的内存的数量:

#vmstat -an 1
 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r b swpd free  inact  active si so bi bo in cs us sy id wa st
 1 0 0 27522384 326928 1704644 0 0 0 153 11 10 0 0 100 0 0
 0 0 0 27523300 326936 1704164 0 0 0 74 784 590 0 0 100 0 0
 0 0 0 27523656 326936 1704692 0 0 8 8 439 1686 0 0 100 0 0
 0 0 0 27524300 326916 1703412 0 0 4 52 198 262 0 0 100 0 0

通过/proc/meminfo 你可以看到更详细的信息:

#cat /proc/meminfo | grep -i inact
 Inactive: 326972 kB
 Inactive(anon): 248 kB
 Inactive(file): 326724 kB

这里我们对不活跃inactive内存进一步深入讨论。 Linux中,内存可能处于三种状态:free,active和inactive。众所周知,Linux Kernel在内部维护了很多LRU列表用来管理内存,比如LRU_INACTIVE_ANON, LRU_ACTIVE_ANON, LRU_INACTIVE_FILE , LRU_ACTIVE_FILE, LRU_UNEVICTABLE。其中LRU_INACTIVE_ANON, LRU_ACTIVE_ANON用来管理匿名页,LRU_INACTIVE_FILE , LRU_ACTIVE_FILE用来管理page caches页缓存。系统内核会根据内存页的访问情况,不定时的将活跃active内存被移到inactive列表中,这些inactive的内存可以被 交换到swap中去。

一般来说,MySQL,特别是InnoDB管理内存缓存,它占用的内存比较多,不经常访问的内存也会不少,这些内存如果被Linux错误的交换出去了,将 浪费很多CPU和IO资源。 InnoDB自己管理缓存,cache的文件数据来说占用了内存,对InnoDB几乎没有任何好处。

所以,我们在MySQL的服务器上最好设置vm.swappiness=0。

我们可以通过在sysctl.conf中添加一行:

echo "vm.swappiness = 0" >>/etc/sysctl.conf

并使用sysctl -p来使得该参数生效。

三、文件系统

最后,我们看一下文件系统的优化

i) 我们建议在文件系统的mount参数上加上noatime,nobarrier两个选项。

用noatime mount的话,文件系统在程序访问对应的文件或者文件夹时,不会更新对应的access time。一般来说,Linux会给文件记录了三个时间,change time, modify time和access time。

我们可以通过stat来查看文件的三个时间:

stat libnids-1.16.tar.gz
 File: `libnids-1.16.tar.gz'
 Size: 72309 Blocks: 152 IO Block: 4096 regular file
 Device: 302h/770d Inode: 4113144 Links: 1
 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
  Access  : 2008-05-27 15:13:03.000000000 +0800
 Modify: 2004-03-10 12:25:09.000000000 +0800
 Change: 2008-05-27 14:18:18.000000000 +0800

其中access time指文件最后一次被读取的时间,modify time指的是文件的文本内容最后发生变化的时间,change time指的是文件的inode最后发生变化(比如位置、用户属性、组属性等)的时间。一般来说,文件都是读多写少,而且我们也很少关心某一个文件最近什 么时间被访问了。

所以,我们建议采用noatime选项,这样文件系统不记录access time,避免浪费资源。

现在的很多文件系统会在数据提交时强制底层设备刷新cache,避免数据丢失,称之为write barriers。但是,其实我们数据库服务器底层存储设备要么采用RAID卡,RAID卡本身的电池可以掉电保护;要么采用Flash卡,它也有自我保 护机制,保证数据不会丢失。所以我们可以安全的使用nobarrier挂载文件系统。设置方法如下:

对于ext3, ext4和 reiserfs文件系统可以在mount时指定barrier=0;对于xfs可以指定nobarrier选项。 

ii) 文件系统上还有一个提高IO的优化万能钥匙,那就是deadline。

在 Flash技术之前,我们都是使用机械磁盘存储数据的,机械磁盘的寻道时间是影响它速度的最重要因素,直接导致它的每秒可做的IO(IOPS)非常有限, 为了尽量排序和合并多个请求,以达到一次寻道能够满足多次IO请求的目的,Linux文件系统设计了多种IO调度策略,已适用各种场景和存储设备。

Linux的IO调度策略包括:Deadline scheduler,Anticipatory scheduler,Completely Fair Queuing(CFQ),NOOP。每种调度策略的详细调度方式我们这里不详细描述,这里我们主要介绍CFQ和Deadline,CFQ是Linux内 核2.6.18之后的默认调度策略,它声称对每一个 IO 请求都是公平的,这种调度策略对大部分应用都是适用的。但是如果数据库有两个请求,一个请求3次IO,一个请求10000次IO,由于绝对公平,3次IO 的这个请求都需要跟其他10000个IO请求竞争,可能要等待上千个IO完成才能返回,导致它的响应时间非常慢。并且如果在处理的过程中,又有很多IO请 求陆续发送过来,部分IO请求甚至可能一直无法得到调度被“饿死”。而deadline兼顾到一个请求不会在队列中等待太久导致饿死,对数据库这种应用来 说更加适用。

实时设置,我们可以通过

echo deadline >/sys/block/sda/queue/scheduler

来将sda的调度策略设置为deadline。

我们也可以直接在/etc/grub.conf的kernel行最后添加elevator=deadline来永久生效。 

总结

CPU方面:

关闭电源保护模式

内存: 

vm.swappiness = 0 

关闭numa

文件系统:

用noatime,nobarrier挂载系统

IO调度策略修改为deadline。

 

来源:http://www.woqutech.com/?p=1200

Linux:ncdu – 基于ncurses库的磁盘使用分析器

Ncdu (NCurses Disk Usage) 是一个基于Ncurses库的du命令的界面。它通过大家熟知的du命令,为用户提供一个快速且容易被使用的界面。它可以显示磁盘使用的百分比,且允许你使用ncurses库的方式在目录之间导航。

Linux:ncdu – 基于ncurses库的磁盘使用分析器
Linux:ncdu – 基于ncurses库的磁盘使用分析器

安装

ncdu已经被移植到大多数linux发行版本,可从官方资源库中安装.

Arch / Manajaro 及其衍生版:

sudo pacman -S ncdu
Linux:ncdu – 基于ncurses库的磁盘使用分析器
Linux:ncdu – 基于ncurses库的磁盘使用分析器

Ubuntu / Debian / Linux Minut 及其衍生版:

sudo apt-get install ncdu

Fedora 及其衍生版:

sudo yum install ncdu

这里可以找到其他的发行版。

使用 ncdu

键盘操作:

  • up, k — 向上移动光标
  • down, j – 向下移动光标
  • right/enter — 打开选定的目录
  • left, <, h — 打开父目录
  • n — 按文件名排序(升序/降序)
  • s — 按文件大小排序(升序/降序)
  • C – 按项目数排序(升序/降序)
  • d – 删除选定的文件或目录
  • t — 排序时将目录放在文件前面
  • g – 以图形方式显示百分比

为使用ncdu,请打开终端并且运行

ncdu

开始扫描目录.

Linux:ncdu – 基于ncurses库的磁盘使用分析器
Linux:ncdu – 基于ncurses库的磁盘使用分析器

当扫描完成后,你能够很容易的看到文件/目录的大小.

Linux:ncdu – 基于ncurses库的磁盘使用分析器
Linux:ncdu – 基于ncurses库的磁盘使用分析器

确认删除文件:

Linux:ncdu – 基于ncurses库的磁盘使用分析器
Linux:ncdu – 基于ncurses库的磁盘使用分析器

这里 阅读ncdu命令手册或运行:

man ncdu

荣誉: 有两位读者BasketCaseSama Vim在阅读“Linux基础:如何在命令行中查看目录的大小”之后 向我们推荐了这个Ncdu工具。

Enjoy!


via: http://www.unixmen.com/ncdu-ncurses-disk-usage-analyzer/

译者:hunanchenxingyu 校对:wxy

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

来源:https://linux.cn/article-3482-1.html

Linux:命令行星期二——第五部分

对,你也许已经猜到了又是我们相见的时候了。这一次我们将会学习如何使用命令工作。因此,事不宜迟,我们直入正题吧。

肖茨先生指出,到现在为止,我们学习了一些神奇的命令及其参数和选项,而今天正是我们揭开他们那神秘面纱一角的一天。我们将会学习如下的一些命令及其作用:type, which, help和man。但是在此之前,我么先学习一下——

什么是命令?

我们可以将命令分为四个种类。

1)可执行的程序:命令可以是一个可执行程序。如果你在前面的课程中有遍历过你的系统,这也是你应该做的。你也许已经发现了/user/bin这个目录,你看到很多的像transmission-gtk, deluge-gtk等的名字。对我们新手来说,现在这些可以编译成二进制文件或者用脚本语言编写的可执行程序具体是什么并不太重要。重点是,他们是可执行文件,你可以运行它们。找到/user/bin这个目录,列出里面的文件,随便挑一个去运行它。

2)shell内置命令: bash提供了一系列的shell内置命令,例如,cd命令就是一个shell内置命令。

3)shell函数:内置于系统环境中的小型的shell脚本。现在我们简单的提及一下它,因为在后面的几个星期中我们将要学习它。

Linux:命令行星期二——第五部分
Linux:命令行星期二——第五部分

4)别名:你可以基于其他命令定义你自己的命令。我们也会在后面的课程中学习到。

 

现在,知道我们要处理的命令的哪一类是有意义的。我们可以使用type命令查看。

type

你可以使用type + command来查看你要使用的命令属于什么类型。你只要输入type command就可以得到命令类型的输出,如下:

type mkdir

或者

type ls

从上面例子可以看出‘ls’命令实际上是‘_ls’的别名。(LCTT译注:不同机器上的别名定义可能不同,比如RedHat/Centos系列上,ls实际上是‘ls –color=auto’的别名,而这个‘_ls’想必是openSUSE上的情况。)

which

有时(虽然在桌面系统中很少会出现这种情况),在一台机器中存在一个可执行程序的多个版本。为了找到某个可执行程序的准确位置,我们可以使用which命令。which命令只对可执行程序有用。

which transmission-gtk

如今,多数的命令都会附带说明文档,因此,当你在没有网络的的情况下使用命令行时,你不能在论坛或者IRC上提问,但是你又必须要知道某个命令的准确用法。此时你有两种解决方法,第一个是——

help

help命令对shell内置命令有用(在上面的第二类中我们有提到过)。所以,你可以选择一个shell内置命令为例,如cd,简单的输入help cd即可。你会得到一个有用的页面,去试一下看cd为我们提供了什么功能。该页面列出了该命令的用法和可选项(选项列在方括号中,表明它们是可选的,如果方括号中有垂直分隔符分隔某些选项,则这些选项是互斥的,不要同时使用他们!)

–help

(LCTT译注:Linux上的命令中,通常单字符参数前使用一个破折号,而多个字符的长参数则使用两个破折号,原文此处用的是“-help”,实际上这种情况很少,所以修正为“–help”)

help只对shell内置命令有用。但是很多的可执行程序有–help选项。其作用类似于help命令,但是你必须在你要查看帮助的命令后输入 –help。例如,transmission-gtk –help。试一下看在改该可执行程序中有什么可选项可以使用。

man

多数的可执行程序都提供一个正式发说明文档。你可以使用man命令查看这份说明文档。试一下只输入man program,看有什么输出。在你的系统中随便找一个程序去尝试一下。例如,我们试一下man transmission-gtk。你会打开了一个由目录分割的文件。这个文件包含该程序是什么、做什么和你可以怎样去使用它等的信息。但是这个文件并没有提供使用范例,因为它不是一个指导手册。(LCTT译注,man里面有时候也会带有一些范例,但是往往不会很详细,另外还有一个info命令,通常能得到更多的使用帮助。不过真正理解每个命令的各种用户,还是要多查阅各种资料,并亲自试验才行。)

这周我们就到先讲这里了。

我想再花一分钟来感谢大家对本节的建议和贡献。是你们让这个系列的文章变得越来越好,我希望在你们的帮助下,我们这些新用户在夏季结束前可以使用基本的命令行工具。你们是最棒的。像我一样的新用户们,我们都会感到失落,坚持到底,我们的付出总会有回报的!


via: https://news.opensuse.org/2014/07/15/command-line-tuesdays-part-five/

译者:cvsher 校对:wxy

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

来源:https://linux.cn/article-3484-1.html