2015年9月

问题: 我正在运行一个程序,它在运行时会派生出多个线程。我想知道程序在运行时会有多少线程。在 Linux 中检查进程的线程数最简单的方法是什么?

如果你想看到 Linux 中每个进程的线程数,有以下几种方法可以做到这一点。

方法一: /proc

proc 伪文件系统,它驻留在 /proc 目录,这是最简单的方法来查看任何活动进程的线程数。 /proc 目录以可读文本文件形式输出,提供现有进程和系统硬件相关的信息如 CPU、中断、内存、磁盘等等.

$ cat /proc/<pid>/status

上面的命令将显示进程 的详细信息,包括过程状态(例如, sleeping, running),父进程 PID,UID,GID,使用的文件描述符的数量,以及上下文切换的数量。输出也包括进程创建的总线程数如下所示。

Threads: <N>

例如,检查 PID 20571进程的线程数:

$ cat /proc/20571/status

输出表明该进程有28个线程。

或者,你可以在 /proc//task 中简单的统计子目录的数量,如下所示。

$ ls /proc/<pid>/task | wc

这是因为,对于一个进程中创建的每个线程,在 /proc/<pid>/task 中会创建一个相应的目录,命名为其线程 ID。由此在 /proc/<pid>/task 中目录的总数表示在进程中线程的数目。

方法二: ps

如果你是功能强大的 ps 命令的忠实用户,这个命令也可以告诉你一个进程(用“H”选项)的线程数。下面的命令将输出进程的线程数。“h”选项需要放在前面。

$ ps hH p <pid> | wc -l

如果你想监视一个进程的不同线程消耗的硬件资源(CPU & memory),请参阅此教程


via: http://ask.xmodulo.com/number-of-threads-process-linux.html

作者:Dan Nanni 译者:strugglingyouth 校对:wxy

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

debian-cd 项目负责人 Stephen McIntyre 今天在Debian邮件列表中对近日召开的 DebConf15 大会上的 Debian CD BoF会议进行了摘要总结。

该消息说,自即将发布的 Debian GNU/Linux 9.0 (Stretch) 版本开始,今后 Debian GNU/Linux 系统不再生成 CD 套装的 ISO 镜像,但是会依旧生成 DVD 和蓝光镜像。

 title=

当前 debian-cd 项目会生成大量的各种镜像,包括:

  • CD
  • DVD
  • 非自由的网络安装镜像(包括非自由的固件包)
  • 非自由的固件打包

debian-live 团队使用 live-build 创建的在线镜像(Live image)

  • 包括非自由的固件的镜像

openstack-debian-images 生成的 Openstack 镜像

所有这些都是在 pettersson 上构建的,这是一台托管在 umu.se 的大型中央化的 CD 构建机。

对于新的发行版和测试版本,会停止构建它的完整 CD 套装(针对 90% 以上的系统架构)。同时,也会停止构建针对不同桌面的可选的 CD1 。不过,会继续构建 DVD 和蓝光镜像,DVD#1 也可以继续用于 4GB 的 USB 存储棒。

网络安装镜像会继续构建,这个又小又方便的镜像还有很多人用。对于旧的发行版,会继续构建 CD 套装和可选的 CD1 (Wheezy 和 Jessie),这个不会半途而废。

Qmmp,一个基于 Qt 的音频播放器,与 Winamp 或 xmms 的用户界面类似,现在最新版本是0.9.0。PPA 已经在 Ubuntu 15.10,Ubuntu 15.04,Ubuntu 14.04,Ubuntu 12.04 和其衍生版本中已经更新了。

Qmmp 0.9.0 是一个较大的版本,有许多新的功能,有许多改进和新的转变。它添加了如下功能:

  • 音频-信道序列转换器;
  • 9通道支持均衡器;
  • 支持艺术家专辑标签;
  • 异步排序;
  • 不用修改 qmmp.pri 来禁用插件(仅在 qmake 中)功能
  • 记住播放列表滚动位置功能;
  • 排除 cue 数据文件功能;
  • 更改用户代理功能;
  • 改变窗口标题功能;
  • 禁用 gme 插件淡出的功能;
  • 简单用户界面(QSUI)有以下变化:

    • 增加了多列的支持;
    • 增加了按艺术家专辑排序;
    • 增加了按文件的修改日期进行排序;
    • 增加了隐藏歌曲长度功能;
    • 增加了“Rename List”的默认热键;
    • 增加了“Save List”功能到标签菜单;
    • 增加了复位字体功能;
    • 增加了复位快捷键功能;
    • 改进了状态栏;

它还改进了播放列表的改变通知,播放列表容器,采样率转换器,cmake 构建脚本,标题格式化,在 mpeg 插件中支持 ape 标签,fileops 插件,降低了 cpu 占用率,改变默认的皮肤(炫光)和分离的播放列表。

qmmp-090

在 Ubuntu 中安装 Qmmp 0.9.0 :

新版本已经制做了 PPA,适用于目前所有 Ubuntu 发行版和衍生版。

1、添加 Qmmp PPA.

从 Dash 中打开终端并启动应用,通过按 Ctrl+Alt+T 快捷键。当它打开时,运行命令:

sudo add-apt-repository ppa:forkotov02/ppa

qmmp-ppa

2、在添加 PPA 后,通过更新软件来升级 Qmmp 播放器。刷新系统缓存,并通过以下命令安装软件:

sudo apt-get update
sudo apt-get install qmmp qmmp-plugin-pack

就是这样。尽情享受吧!


via: http://ubuntuhandbook.org/index.php/2015/09/qmmp-0-9-0-in-ubuntu/

作者:Ji m 译者:strugglingyouth 校对:wxy

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

作为系统管理员的日常职责的一部分,每个系统管理员都必须处理文本文件,这包括编辑已有文件(大多可能是配置文件),或创建新的文件。有这样一个说法,假如你想在 Linux 世界中挑起一场圣战,你可以询问系统管理员们,什么是他们最喜爱的编辑器以及为什么。在这篇文章中,我们并不打算那样做,但我们将向你呈现一些技巧,这些技巧对使用两款在 RHEL 7 中最为常用的文本编辑器: nano(由于其简单和易用,特别是对于新手来说)和 vi/m(由于其自身的几个特色使得它不仅仅是一个简单的编辑器)来说都大有裨益。我确信你可以找到更多的理由来使用其中的一个或另一个,或许其他的一些编辑器如 emacs 或 pico。这完全取决于你自己。

学习 Nano 和 vi 编辑器

RHCSA: 使用 Nano 和 Vim 编辑文本文件 – Part 4

使用 Nano 编辑器来编辑文件

要启动 nano,你可以在命令提示符下输入 nano,或可选地跟上一个文件名(在这种情况下,若文件存在,它将在编辑模式中被打开)。若文件不存在,或我们省略了文件名, nano 也将在编辑模式下开启,但将为我们开启一个空白屏以便开始输入:

Nano 编辑器

Nano 编辑器

正如你在上一张图片中所见的那样, nano 在屏幕的底部呈现出一些可以通过指定的快捷键来触发的功能(^,即插入记号,代指 Ctrl 键)。它们中的一些是:

  • Ctrl + G: 触发一个帮助菜单,带有一个关于功能和相应的描述的完整列表;

Nano 编辑器帮助菜单

Nano 编辑器帮助菜单

  • Ctrl + O: 保存更改到一个文件。它可以让你用一个与源文件相同或不同的名称来保存该文件,然后按 Enter 键来确认。

Nano 编辑器保存更改模式

Nano 编辑器的保存更改模式

  • Ctrl + X: 离开当前文件,假如更改没有被保存,则它们将被丢弃;
  • Ctrl + R: 通过指定一个完整的文件路径,让你选择一个文件来将该文件的内容插入到当前文件中;

Nano: 插入文件内容到主文件中

Nano: 插入文件内容到主文件中

上图的操作将把 /etc/passwd 的内容插入到当前文件中。

  • Ctrl + K: 剪切当前行;
  • Ctrl + U: 粘贴;
  • Ctrl + C: 取消当前的操作并返回先前的屏幕;

为了轻松地在打开的文件中浏览, nano 提供了下面的功能:

  • Ctrl + F 和 Ctrl + B 分别先前或向后移动光标;而 Ctrl + P 和 Ctrl + N 则分别向上或向下移动一行,功能与箭头键相同;
  • Ctrl + space 和 Alt + space 分别向前或向后移动一个单词;

最后,

  • 假如你想将光标移动到文档中的特定位置,使用 Ctrl + \_ (下划线) 并接着输入 X,Y 将准确地带你到 第 X 行,第 Y 列。

在 nano 中定位到具体的行,列

在 nano 中定位到具体的行和列

上面的例子将带你到当前文档的第 15 行,第 14 列。

假如你可以回忆起你早期的 Linux 岁月,特别是当你刚从 Windows 迁移到 Linux 中,你就可能会同意:对于一个新手来说,使用 nano 来开始学习是最好的方式。

使用 Vim 编辑器来编辑文件

Vim 是 vi 的加强版本,它是 Linux 中一个著名的文本编辑器,可在所有兼容 POSIX 的 *nix 系统中获取到,例如在 RHEL 7 中。假如你有机会并可以安装 Vim,请继续;假如不能,这篇文章中的大多数(若不是全部)的提示也应该可以正常工作。

Vim 的一个出众的特点是可以在多个不同的模式中进行操作:

  • 命令模式 Command Mode 将允许你在文件中跳转和输入命令,这些命令是由一个或多个字母组成的简洁且大小写敏感的组合。假如你想重复执行某个命令特定次数,你可以在这个命令前加上需要重复的次数(这个规则只有极少数例外)。例如, yy(或 Y,yank 的缩写)可以复制整个当前行,而 4yy(或 4Y)则复制整个从当前行到接下来的 3 行(总共 4 行)。
  • 我们总是可以通过敲击 Esc 键来进入命令模式(无论我们正工作在哪个模式下)。
  • 末行模式 Ex Mode 中,你可以操作文件(包括保存当前文件和运行外部的程序或命令)。要进入末行模式,你必须从命令模式中(换言之,输入 Esc + :)输入一个冒号(:),再直接跟上你想使用的末行模式命令的名称。
  • 对于 插入模式 Insert Mode ,可以输入字母 i 进入,然后只需要输入文字即可。大多数的击键结果都将出现在屏幕中的文本中。

现在,让我们看看如何在 vim 中执行在上一节列举的针对 nano 的相同的操作。不要忘记敲击 Enter 键来确认 vim 命令。

为了从命令行中获取 vim 的完整手册,在命令模式下键入 :help 并敲击 Enter 键:

vim 编辑器帮助菜单

vim 编辑器帮助菜单

上面的部分呈现出一个内容列表,这些定义的小节则描述了 Vim 的特定话题。要浏览某一个小节,可以将光标放到它的上面,然后按 Ctrl + ] (闭方括号)。注意,底部的小节展示的是当前文件的内容。

1、 要保存更改到文件,在命令模式中运行下面命令中的任意一个,就可以达到这个目的:

:wq!
:x!
ZZ (是的,两个 ZZ,前面无需添加冒号)

2、 要离开并丢弃更改,使用 :q!。这个命令也将允许你离开上面描述过的帮助菜单,并返回到命令模式中的当前文件。

3、 剪切 N 行:在命令模式中键入 Ndd

4、 复制 M 行:在命令模式中键入 Myy

5、 粘贴先前剪贴或复制过的行:在命令模式中按 P键。

6、 要插入另一个文件的内容到当前文件:

:r filename

例如,插入 /etc/fstab 的内容,可以这样做:

在 vi 编辑器中插入文件的内容

在 vi 编辑器中插入文件的内容

7、 插入一个命令的输出到当前文档:

:r! command

例如,要在光标所在的当前位置后面插入日期和时间:

在 vi 编辑器中插入时间和日期

在 vi 编辑器中插入时间和日期

在另一篇我写的文章中,(LFCS 系列(二)),我更加详细地解释了在 vim 中可用的键盘快捷键和功能。或许你可以参考那个教程来查看如何使用这个强大的文本编辑器的更深入的例子。

使用 grep 和正则表达式来分析文本

到现在为止,你已经学习了如何使用 nano 或 vim 创建和编辑文件。打个比方说,假如你成为了一个文本编辑器忍者 – 那又怎样呢? 在其他事情上,你也需要知道如何在文本中搜索正则表达式。

正则表达式(也称为 "regex" 或 "regexp") 是一种识别一个特定文本字符串或模式的方式,使得一个程序可以将这个模式和任意的文本字符串相比较。尽管利用 grep 来使用正则表达式值得用一整篇文章来描述,这里就让我们复习一些基本的知识:

1、 最简单的正则表达式是一个由数字和字母构成的字符串(例如,单词 "svm") ,或者两个(在使用两个字符串时,你可以使用 |(或) 操作符):

# grep -Ei 'svm|vmx' /proc/cpuinfo

上面命令的输出结果中若有这两个字符串之一的出现,则标志着你的处理器支持虚拟化:

正则表达式示例

正则表达式示例

2、 第二种正则表达式是一个范围列表,由方括号包裹。

例如, c[aeiou]t 匹配字符串 cat、cet、cit、cot 和 cut,而 [a-z][0-9] 则相应地匹配小写字母或十进制数字。假如你想重复正则表达式 X 次,在正则表达式的后面立即输入 {X}即可。

例如,让我们从 /etc/fstab 中析出存储设备的 UUID:

# grep -Ei '[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}' -o /etc/fstab

在 Linux 中从一个文件中析出字符串

从一个文件中析出字符串

方括号中的第一个表达式 [0-9a-f] 被用来表示小写的十六进制字符,{8}是一个量词,暗示前面匹配的字符串应该重复的次数(在一个 UUID 中的开头序列是一个 8 个字符长的十六进制字符串)。

在圆括号中,量词 {4}和连字符暗示下一个序列是一个 4 个字符长的十六进制字符串,接着的量词 ({3})表示前面的表达式要重复 3 次。

最后,在 UUID 中的最后一个 12 个字符长的十六进制字符串可以由 [0-9a-f]{12} 取得, -o 选项表示只打印出在 /etc/fstab中匹配行中的匹配的(非空)部分。

3、 POSIX 字符类

字符类匹配 …
[:alnum:]任意字母或数字 [a-zA-Z0-9]
[:alpha:]任意字母 [a-zA-Z]
[:blank:]空格或制表符
[:cntrl:]任意控制字符 (ASCII 码的 0 至 32)
[:digit:]任意数字 [0-9]
[:graph:]任意可见字符
[:lower:]任意小写字母 [a-z]
[:print:]任意非控制字符
[:space:]任意空格
[:punct:]任意标点字符
[:upper:]任意大写字母 [A-Z]
[:xdigit:]任意十六进制数字 [0-9a-fA-F]
[:word:]任意字母,数字和下划线 [a-zA-Z0-9\_]

例如,我们可能会对查找已添加到我们系统中给真实用户的 UID 和 GID(参考“RHCSA 系列(二): 如何进行文件和目录管理”来回忆起这些知识)感兴趣。那么,我们将在 /etc/passwd 文件中查找 4 个字符长的序列:

# grep -Ei [[:digit:]]{4} /etc/passwd

在文件中查找一个字符串

在文件中查找一个字符串

上面的示例可能不是真实世界中使用正则表达式的最好案例,但它清晰地启发了我们如何使用 POSIX 字符类来使用 grep 分析文本。

总结

在这篇文章中,我们已经提供了一些技巧来最大地利用针对命令行用户的两个文本编辑器 nano 和 vim,这两个工具都有相关的扩展文档可供阅读,你可以分别查询它们的官方网站(链接在下面给出)以及使用“RHCSA 系列(一): 回顾基础命令及系统文档”中给出的建议。

参考文件链接


via: http://www.tecmint.com/rhcsa-exam-how-to-use-nano-vi-editors/

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

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

通常情况下,我会安装启动 Ubuntu 和 Windows 的双系统,但是这次我决定完全消除 Windows 纯净安装 Ubuntu。纯净安装 Ubuntu 完成后,结束时屏幕输出 无可引导设备 ( no bootable device found ) 而不是进入 GRUB 界面。显然,安装搞砸了 UEFI 引导设置。

安装完 Ubuntu 后无可引导设备

我会告诉你我是如何修复在宏碁笔记本上安装 Ubuntu 后出现 无可引导设备 no bootable device found 错误的。我声明了我使用的是宏碁灵越 R13,这很重要,因为我们需要更改固件设置,而这些设置可能因制造商和设备有所不同。

因此在你开始这里介绍的步骤之前,先看一下发生这个错误时我计算机的状态:

  • 我的宏碁灵越 R13 预装了 Windows 8.1 和 UEFI 引导管理器
  • 安全引导 ( Secure boot ) 没有关闭,(我的笔记本刚维修过,维修人员又启用了它,直到出现了问题我才发现)。你可以阅读这篇博文了解如何在宏碁笔记本中关闭 安全引导 ( secure boot )
  • 我选择了清除所有东西安装 Ubuntu,例如现有的 Windows 8.1,各种分区等
  • 安装完 Ubuntu 之后,从硬盘启动时我看到无可引导设备错误。但能从 USB 设备正常启动

在我看来,没有禁用 安全引导 ( secure boot ) 可能是这个错误的原因。但是,我没有数据支撑我的观点。这仅仅是预感。有趣的是,双系统启动 Windows 和 Linux 经常会出现这两个 Grub 问题:

如果你遇到类似的情况,你可以试试我的修复方法。

修复安装完 Ubuntu 后无可引导设备错误

请原谅我的图片质量很差。我的一加相机不能很好地拍摄笔记本屏幕。

第一步

关闭电源并进入引导设置。我需要在宏碁灵越 R13 上快速地按下 Fn+F2。如果你使用固态硬盘的话要按的非常快,因为固态硬盘启动速度很快。这取决于你的制造商,你可能要用 Del 或 F10 或者 F12。

第二步

在引导设置中,确保启用了 安全引导 ( Secure Boot ) 。它在 Boot 标签里。

第三步

进入到 Security 标签,找到 “ 选择一个用于执行的可信任 UEFI 文件 ( Select an UEFI file as trusted for executing ) ” 并敲击回车。

修复无可引导设备错误

特意说明,我们这一步是要在你的设备中添加 UEFI 设置文件(安装 Ubuntu 的时候生成)到可信 UEFI 启动中。如果你记得的话,UEFI 启动的主要目的是提供安全性,由于(可能)没有禁用 安全引导 ( Secure Boot ) ,设备不会试图从新安装的操作系统中启动。添加它到类似白名单的可信列表,会使设备从 Ubuntu UEFI 文件启动。

第四步

在这里你可以看到你的硬盘,例如 HDD0。如果你有多块硬盘,我希望你记住你安装 Ubuntu 的那块。同样敲击回车。

在 Boot 设置中修复无可引导设备错误

第五步

你应该可以看到了,敲击回车。

在 UEFI 中修复设置

第六步

在下一个屏幕中你会看到 。耐心点,马上就好了。

安装完 Ubuntu 后修复启动错误

第七步

你可以看到 shimx64.efi,grubx64.efi 和 MokManager.efi 文件。重要的是 shimx64.efi。选中它并敲击回车。

修复无可引导设备

在下一个屏幕中,输入 Yes 并敲击回车。

无可引导设备_7

第八步

当我们添加它到可信 EFI 文件并执行后,按 F10 保存并退出。

保存并退出固件设置

重启你的系统,这时你就可以看到熟悉的 GRUB 界面了。就算你没有看到 Grub 界面,起码也再也不会看到“ 无可引导设备 ( no bootable device found ) ”。你应该可以进入 Ubuntu 了。

如果修复后搞乱了你的 Grub 界面,但你确实能登录系统,你可以重装 Grub 并进入到 Ubuntu 熟悉的紫色 Grub 界面。

我希望这篇指南能帮助你修复无可引导设备错误。欢迎提出任何疑问、建议或者感谢。


via: http://itsfoss.com/no-bootable-device-found-ubuntu/

作者:Abhishek 译者:ictlyh 校对:wxy

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

想要安装最新的Linux内核吗?一个简单的脚本就可以在Ubuntu系统中方便的完成这项工作。

Michael Murphy 写了一个脚本用来将最新的候选版、标准版、或者低延时版的内核安装到 Ubuntu 系统中。这个脚本会在询问一些问题后从 Ubuntu 内核主线页面 下载安装最新的 Linux 内核包。

通过脚本来安装、升级Linux内核:

1、 点击这个 github 页面 右上角的 “Download Zip” 来下载该脚本(注:此脚本在墙外,我已经搬运回来了,请参见下面。)。

2、鼠标右键单击用户下载目录下的 Zip 文件,选择 “在此展开” 将其解压。

3、右键点击解压后的文件夹,选择 “在终端中打开” 到此文件夹下。

此时将会打开一个终端,并且自动导航到目标文件夹下。如果你找不到 “在终端中打开” 选项的话,在 Ubuntu 软件中心搜索安装 nautilus-open-terminal ,然后重新登录系统即可(也可以再终端中运行 nautilus -q 来取代重新登录系统的操作)。

备注:此脚本如下,你可以将它保存为一个可执行的 shell 脚本:

#!/bin/bash
cd /tmp

if ! which lynx > /dev/null; then sudo apt-get install lynx -y; fi

if [ "$(getconf LONG_BIT)" == "64" ]; then arch=amd64; else arch=i386; fi

function download() {
   wget $(lynx -dump -listonly -dont-wrap-pre $kernelURL | grep "$1" | grep "$2" | grep "$arch" | cut -d ' ' -f 4)
}

# Kernel URL
read -p "Do you want the latest RC?" rc
case "$rc" in
   y* | Y*) kernelURL=$(lynx -dump -nonumbers http://kernel.ubuntu.com/~kernel-ppa/mainline/ | tail -1) ;;
   n* | N*) kernelURL=$(lynx -dump -nonumbers http://kernel.ubuntu.com/~kernel-ppa/mainline/ | grep -v rc | tail -1) ;;
   *) exit ;;
esac
 
read -p "Do you want the lowlatency kernel?" lowlatency
case "$lowlatency" in
   y* | Y*) lowlatency=1 ;;
   n* | n*) lowlatency=0 ;;
   *) exit ;;
esac

# Download Kernel
if [ "$lowlatency" == "0" ]; then
   echo "Downloading the latest generic kernel."
   download generic header
   download generic image
elif [ "$lowlatency" == "1" ]; then
   echo "Downloading the latest lowlatency kernel."
   download lowlatency header
   download lowlatency image
fi

# Shared Kernel Header
wget $(lynx -dump -listonly -dont-wrap-pre $kernelURL | grep all | cut -d ' ' -f 4)

# Install Kernel
echo "Installing Linux Kernel"
sudo dpkg -i linux*.deb
echo "Done. You may now reboot."
  1. 当进入终端后,运行以下命令来赋予脚本执行本次操作的权限。
chmod +x *

最后,每当你想要安装或升级 Ubuntu 的 linux 内核时都可以运行此脚本。

./*

这里之所以使用 * 替代脚本名称是因为文件夹中只有它一个文件。

如果脚本运行成功,重启电脑即可。

恢复并且卸载新版内核

如果因为某些原因要恢复并且移除新版内核的话,请重启电脑,在 Grub 启动器的 高级选项 菜单下选择旧版内核来启动系统。

当系统启动后,参照下边章节继续执行。

如何移除旧的(或新的)内核:

  1. 从 Ubuntu 软件中心安装 Synaptic Package Manager。
  2. 打开 Synaptic Package Manager 然后如下操作:
  • 点击 Reload 按钮,让想要被删除的新内核显示出来.
  • 在左侧面板中选择 Status -> Installed ,让查找列表更清晰一些。
  • 在 Quick filter 输入框中输入 linux-image- 用于查询。
  • 选择一个内核镜像 “linux-image-x.xx.xx-generic” 然后将其标记为removal(或者Complete Removal)
  • 最后,应用变更

重复以上操作直到移除所有你不需要的内核。注意,不要随意移除此刻正在运行的内核,你可以通过 uname -r 命令来查看运行的内核。

对于 Ubuntu 服务器来说,你可以一步步运行下面的命令:

uname -r

dpkg -l | grep linux-image-

sudo apt-get autoremove KERNEL_IMAGE_NAME


via: http://ubuntuhandbook.org/index.php/2015/08/install-latest-kernel-script/

作者:Ji m 译者:mr-ping 校对:wxy

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