分类 技术 下的文章

对于那些使用Intel显卡台式机或者笔记本来运行 Ubuntu Linux 13.10 的用户来说,有件事可能想要完成——安装 Linux 版本的Intel图形安装程序。

Linux 版本的Intel图形安装程序允许用户方便地安装最新的Intel图形和视频驱动程序。现在之前,仍不支持 Ubuntu 13.10。

如果你想保持目前Intel卡在你机器中的最新驱动程序,你可能需要这个安装程序。它能增强、优化并提供Intel图形硬件最好的用户体验。

访问官网:https://01.org/linuxgraphics/downloads/2013/intelr-graphics-installer-1.0.3-linux

在 Ubuntu 中安装Intel图形安装程序

如果你确定你的计算机有Intel图形卡,而且你正在运行的版本是 Ubuntu 13.10,继续下面的学习如何安装这个包,

有些用户安装和配置驱动程序包后曾造成系统问题,所以你应该在安装前持谨慎态度,并备份你的系统。当你完成后,执行下面的命令来下载32位版本的软件包。

32位 Ubuntu Linux

cd /tmp && wget https://download.01.org/gfx/ubuntu/13.10/main/pool/main/i/intel-linux-graphics-installer/intel-linux-graphics-installer_1.0.3_i386.deb

对于那些运行64位的 Ubuntu,运行下面的命令来下载64位版本。

64位 Ubuntu Linux

cd /tmp && wget https://download.01.org/gfx/ubuntu/13.10/main/pool/main/i/intel-linux-graphics-installer/intel-linux-graphics-installer_1.0.3_amd64.deb

下载完成后,运行以下命令进行安装。

sudo dpkg -i intel-linux-graphics-installer*.deb; sudo apt-get -f install 

安装程序安装完毕后,进入 Unity Dash 搜索安装程序。打开后继续。它会为你的设备搜索并确定正确的驱动程序。

为了让你的系统信任Intel图形安装程序,您必须运行下面命令来添加 key 到 Ubuntu 的软件库中。

wget --no-check-certificate https://download.01.org/gfx/RPM-GPG-KEY-ilg -O - | sudo apt-key add -

就这么简单。如果你按照以上步骤做了,你的机器应该能正确运行Intel驱动程序。如果不是,可能是你的显卡不兼容,或者是不支持。


via: http://www.liberiangeek.net/2014/01/daily-ubuntu-tips-intel-graphics-installer-1-0-3-released-supports-ubuntu-13-10/

译者:乌龙茶 校对:Caroline

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

将一个特定页面抓取为一张png图片的最简单的方法是使用CutyCapt,这是一种在Linux下的方便地将HTML网页转化成矢量图形和位图图像格式的命令行工具(比如,SVG, PDF, PS, PNG, JPEG, TIFF, GIF)。CutyCapt内部使用WebKit渲染引擎来导出网页渲染输出到图片文件中。它使用Qt构建,CutyCapt实际上是一个也可以在Windows上使用的跨平台应用。(译注:也有一个基于IE内核的 IECapt 可以作此用途)

在本篇教程中,我会描述如何将一个HTML网页使用CutyCapt转化成png图片

在Linux上安装 CutyCapt

这是在特定Linux发行版上的安装命令。

在Debian, Ubuntu 或者 Linux Mint 安装 CutyCapt

$ sudo apt-get install cutycapt 

在Fedora上安装 CutyCapt

$ sudo yum install subversion qt-devel qtwebkit-devel gcc-c++ make
$ svn co svn://svn.code.sf.net/p/cutycapt/code/ cutycapt
$ cd cutycapt/CutyCapt 

在Fedora上编译前,你需要在源码上打上补丁

使用文本编辑器打开CutyCapt.hpp,并且加入在文件的开头加上下面的两行。

#include 
#include 

最后,如下编译并安装CutyCapt。

$ qmake-qt4
$ make
$ sudo cp CutyCapt /usr/local/bin/cutycapt 

在CentOS 或者 RHEL安装 CutyCapt

首先在你的Linux上启用EPEL仓库。接着和在Fedora上一样使用相同的步骤编译安装。

使用CutyCapt将 HTML 转化成 PNG

将一个HTML页面截图成一个png图片,只要使用下面的格式运行CutyCapt。

$ cutycapt --url=http://www.cnn.com --out=cnn.png

要将HTML页面保存成不同的格式(比如,PDF),只要适当地指定输出文件。

$ cutycapt --url=http://www.cnn.com --out=cnn.pdf

下图显示了CutyCapt命令选项。

在一台不含X的服务器上使用CutyCapt将HTML转换成PNG

虽然CutyCapt是一个命令行工具,但是它需要X服务运行。如果你尝试在不含X服务的机器上运行,你会得到下面这个错误:

cutycapt: cannot connect to X server :0

如果你要不含X的服务器上运行CutyCapt,你可以在服务器上安装Xvfb(轻量级“假的”X11 服务)。这样CutyCapt就不会报错了。

要在Debian, Ubuntu 或者 Linux Mint 上安装Xvfb:

$ sudo apt-get install xvfb 

要在Fedora, CentOS 或者 RHEL 上安装Xvfb:

$ sudo yum install xvfb 

在安装Xvfb之后,接下来像这样运行CutyCapt。

$ xvfb-run --server-args="-screen 0, 1280x1200x24" cutycapt --url=http://www.cnn.com --out=cnn.png 

它首先会运行Xbfb服务,接着使用CutyCapt来抓取网页。因此它可能会花费更长的时间。如果你想要截图多张截图,你可能事先需要将Xvfb作为后台守护进程启动。


via: http://xmodulo.com/2014/02/convert-html-web-page-png-image-linux.html

译者:geekpi 校对:wxy

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

尽管 Ubuntu One 看上去像一个仅支持 Ubuntu 文件同步服务,但实际上它可以在 Windows,Android,iOS 和网页上使用。而且,Ubuntu One 提供了5GB的免费存储空间。

(图片来自: http://kryuko.deviantart.com/art/Ubuntu-One-Icon-332840346

根据 howtogeek.com 的介绍,用户通过 Ubuntu One 可以在线共享文件或目录,推送音乐到手机,在所有的设备上同步已安装的应用等等。下面我们一起来看一下10个Ubuntu One你也许不知道的功能。

1.同步目录 - 在默认设置下,Ubuntu 系统仅仅会同步用户主目录下的 Ubuntu One 目录。但是你可以用鼠标右击任意文件夹,然后点击 Ubuntu One 菜单,选择 Synchronize This Folder 开始同步,这样就可以将这个目录加入到 Ubuntu One 中了。在 Ubuntu One 中,你可以管理所有的已同步目录。

2.限制带宽 - 在默认设置下,Ubuntu One 会使用系统全部的网络带宽来上传或下载文件。但是,如果你接入网络速度比较慢,它也允许设定上传和下载速度。你可以在 Ubuntu One 主窗口的设置界面里找到带宽设置。

3.在Windows上使用Ubuntu One - Ubuntu One 不是仅仅在 Linux 上运行,它也有一个 Windows 的客户端,提供完整的文件同步支持。Ubuntu One 是一个跨平台的文件同步服务,即使是完全没有接触过 Ubuntu 的 Windows 用户,也可以使用 Ubuntu One 提供的服务。

4.共享文件 - 在文件管理器的鼠标右键菜单或者 Ubuntu One 网站,你可以将文件或者目录共享到因特网上,也可以选择分享给指定的 Ubuntu One 用户。

5.同步已安装应用 - Ubuntu One 可以在你所有的计算机上同步你从Ubuntu的软件中心安装的应用,这样你就可以轻松管理已安装的应用。

6.手机应用 - Ubuntu One 为 Android,iPhone,iPad和Ipod Touch 提供了应用。通过这些应用,你可以在移动设备上轻松访问 Ubuntu One 的文件。

7.自动上传智能手机中的相片 - 移动应用还支持自动上传手机中的相片到 Ubuntu One 云服务器中,这样你可以轻松地在所有的设备上浏览你的相片。

8.在线音乐播放 - Ubuntu One 还提供了 Ubuntu One 音乐应用,支持 Android和iOS。你可以通过智能手机在任意地方欣赏你的音乐,也可以选择缓存到本地离线播放。

9.同步联系人 - Ubuntu One可以同步你的联系人并在线保存。目前,你可以在 Ubuntu One 网页上导入 Facebook 联系人,或者手动添加。早期版本的 Ubuntu 还支持同步 Evolution 邮件客户端的联系人,但在新的12.04版本中不支持从 Thunderbird 邮件客户端同步联系人。

10.在浏览器中管理你的文件 - 在电脑上安装了 Ubuntu One 后,可以在 Ubuntu One 网页上管理本地文件。你可以在浏览器中下载文件,上传文件,或者管理现有的文件。


via: http://www.efytimes.com/e1/fullnews.asp?edid=127466

译者:zpl1025 校对:Caroline

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

熟悉了 复制命令,下一个相关的命令就是 mv 命令。当你想要将文件从一个位置移动到另一个地方并且不想复制它,那么mv 命令是完成这个任务的首选。

初识 mv 命令

mv 命令是一个与cp类似的命令,但是它并非创建文件或目录的复制品/副本。不管你在使用什么版本的Linux系统,mv 都默认安装在你的Linux系统上了。来看一下 mv 命令在日常操作中的一些例子。

1.移动文件

移动文件时需要注意的是文件的源地址和目标地址必须不同。这里有个例子,想要将file\_1.txt文件从当前目录移动到其它目录,以/home/pungki/为例,语法应该如下:

$ mv file_1.txt /home/pungki/office

mv command

如我们所见,当我们移动 file\_1.txt 文件时,先前目录的 file\_1.txt 就被删除了

2.移动多个文件

如果想一次移动多个文件,我们可以将他们放在一行并用空格分开。

$ mv file_2.txt file_3.txt file_4.txt /home/pungki/office

Move multiple files

如果你的文件有规律可循的话那么你就可以使用通配符。比如,为了移除所有以.txt为扩展名的文件,我们可以用下面的命令:

$ mv *.txt /home/pungki/office

Move using pattern

3.移动目录

不同于复制命令,用 mv 命令移动目录相当直接。移动目录你可以使用不带选项的 mv 命令。看下面的截图就一目了然了。

Moving directory

4.重命名文件或目录

我们也用 mv 命令来重命名文件或目录。不过目标位置和源位置必须相同才可以。然后文件名必须不同。

假定我们当前所在目录为/home/pungki/Documents,而我们想将file\_1.txt重命名为file\_2.txt。那么命令应该如下:

$ mv file_1.txt file_2.txt

如果是绝对路径,它应该像下面这样:

$ mv /home/pungki/Documents/file_1.txt /home/pungki/Documents/file_2.txt

Renaming file

5. 重命名目录

上一段的规则同样适用于目录。请看这个例子:

$ mv directory_1/ directory_2/

Renaming directory

6. 打印移动信息

当你移动或重命名一大堆文件或目录时,你可能会想在不去目标位置去查看的情况下知道你自己的命令是否成功地执行了。这就要用到-v选项了。

$ mv -v *.txt /home/pungki/office

mv with verbose mode

该方法同样适用于目录。

mv directory with verbose mode

7. 使用交互模式

当你将文件移动到其它位置,而那个位置恰好有同样的文件,这时 mv 命令会覆盖掉原来的文件。对于mv的这一行为一般不会有什么提示。如果想产生一个关于覆盖文件的提示,我们可以使用-i选项。(译注:通常发行版会通过alias命令,将-i作为默认选项,所以会有提示。)

假设我们想将 file\_1.txt 移动到 /home/pungki/office。同时,/home/pungki/office 目录下已经有file\_1.txt文件了。

$ mv -i file_1.txt /home/pungki/office

mv with interactive mode

这个提示会让我们知道目标位置处file\_1.txt的存在。如果我们按y键,那么那个文件将会被删除,否则不会。

8. 使用更新选项

-i 选项会提示我们关于覆盖文件的提示,而 -u 则只在源文件比目标文件新时才执行更新。让我们看一看下面的例子:

Update only newer

假如 file\_1.txt 和 file\_2.txt有如下特点:

File_1.txt has 84 bytes file size and it last modified time is 12:00
File_2.txt has 0 bytes file size and it last modified time is 11:59

我们想将它们移动到 /home/pungki/office 目录下。但是目标地址已经有file\_1.txt和file\_2.txt了。

我们用下面的命令将file\_1.txt 和file\_2.txt从当前目录移动到/home/pungki/office

$ mv -uv *.txt /home/pungki/office

可以看到这些文件被移动了。能移动这些文件是因为它们最近的修改时间戳比 /home/pungki/office 目录中的文件新。

9.不要覆盖任何已存在的文件

如果-i选项询问我们是否要覆盖文件,那么 -n 选项将不会允许我们覆盖任何已存在的文件。

继续使用第8点中的例子,如果我们将-u 换成 -n同时加上-v选项,那么我们会看到没有任何文件移动到了 /home/pungki/office 目录下。

$ mv -vn *.txt /home/pungki/office

No overwrite

10. 复制时创建备份

默认情况下,移动文件将会覆盖已存在的目标文件。但是如果我们移动错了文件而目标文件已经被新的文件覆盖了,这时应该怎么办才好呢?有没有一种方法可以恢复之前的文件呢?答案是肯定的。我们可以用-b选项。该选项会在新文件覆盖旧文件时将旧文件做备份。这里我们还以第8点为例。

$ mv -bv *.txt /home/pungki/office

Backup option

如截图中所见,在 /home/pungki/office 目录下出现了名为file\_1.txt~file\_2.txt~ 的文件。那个波浪符号(~)意味着这些文件是备份文件。从它们的属性中我们可以看到,这些文件比file\_1.txt和file\_2.txt要旧。

11. 无条件覆盖已经存在的文件

(译注:这一节是译者补充的,原文遗漏了这个重要选项)

当你希望无论如何都覆盖已经存在的文件或目录时,你可以使用 -f 选项。如果同时指定了 -f 选项和 -i 或 -n 选项,则 -f 选项会覆盖它们——即不进行任何提示而覆盖,所以,在使用此参数时,知道你在做什么。

$ mv -f *.txt /home/pungki/office

总结

移动文件和目录命令是Linux系统的基本命令。通常你可以通过man mv 或者 mv --help显示mv的手册页以了解更多详细信息。


via: http://linoxide.com/linux-command/mv-command-linux/

译者:Linchenguang 校对:wxy

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

拷贝文件和目录是每一个操作系统的基本指令。备份行为基本上是创建文件和目录的副本。在Linux系统下,我们可以用cp命令来实现。

copy 命令是什么

正如我们在上文提到的,cp是一个用来创建文件和目录副本的命令。在这里我们提供了一些在日常操作中可能用到的cp命令的实例。

1. 不带任何参数下,运行cp

这是 cp 命令最基础的使用。 拷贝名为 myfile.txt 从一个位置到另一个位置,我们可以像这样子输入:

$ cp myfile.txt /home/pungki/office

Copy without options

如果我们没有输入绝对路径,这意味着我们正在当前目录下拷贝一个文件。在上面的实例中,myfile.txt位于/home/pungki/Documents目录下。如果我们当前目录正是/home/pungki/Documets,那么没有必要输入/home/pungki/Documents/myfile.txt来拷贝文件。当/home/pungki/office是一个目录,则文件会拷贝到里面。

2. 同时拷贝多个文件

要在同时拷贝多个文件,我们只需要将多个文件用空格隔开。如下示例:

$ cp file_1.txt file_2.txt file_3.txt /home/pungki/office

Copying multiple files

3. 拷贝一个目录

要拷贝一个目录的话会有点棘手。你需要添加 -r 或者 -R 选项来实现。-r-R 选项表明递归操作。无论该目录是否为空目录,这个选项都是必要的。如下示例:

$ cp -r directory_1 /home/pungki/office

Copy directory

需要注意的一件事,你需要移除在目录名尾部的斜杠。否则你会收到类似的错误信息cp: omitting directory‘directory\_1/

Copy directory error

如果你收到错误信息,则目录不会被拷贝到目标文件夹。

4. 创建文件的硬链接,而不是拷贝它们

拷贝文件意味着你必须使用一些存储空间来储存拷贝的文件。有时候出于某种原因,你可能想要创建“快捷方式”或者链接到文件,而不是拷贝它们。要做到这一点,我们可以使用-l选项。

$ cp -l file_4.txt /home/pungki/office

Copy hardlinks

从上图看出,我们看到file\_4.txt的硬链接已经拷贝到/home/pungki/office/file\_4.txt。标记有同样的 inode, 835386。但是请注意,硬链接不能用来创建目录。下面让我们看一个例子。

原目录 directory\_1 的 inode 值是 278230

Inode number of original directory

原文件 file\_5.txt 的 inode 值是 279231

Original inode number of file

对 directory\_1 执行 cp 命令

Copy using -rl options

拷贝的 directory\_1副本的 inode 值是 274800

Inode number of copied directory

拷贝的 file\_5.txt副本的 inode 值是 279231。跟它的原文件一样

Inode number of copied file

5. 创建文件的符号链接

也有一种链接叫做 软链接符号链接。我们用 -s 选项来实现。下面是命令的示例。

$ cp -s /home/pungki/Documents/file_6.txt file_6.txt

创建符号链接只能在当前目录下进行。在上面的截图中,我们想要创建符号链接 /home/pungki/office/file6.txt 指向原文件 /home/pungki/Documents/file6.txt。但是为了创建符号链接,我必须在将/home/pungki/office作为目标目录。一旦我设法进入目录,我就可以向上面一样运行 cp -s 命令。

现在你列出文件详情,你会看到/home/pungki/office/file\_6.txt指向了原文件。在其文件名后标记了箭头符号。

Symbolic links

6. 不随符号链接拷贝原文件

[译注:意思是只拷贝符号链接文件]

我们可以用 -P 选项来实现。当对符号链接使用 cp 命令,它会照原样拷贝它自身。来看看下面的示例。

$ cp -P file_6.txt ./movie

Copy using -P option

如你所见,cp 命令照原样拷贝file\_6.txt自身。文件类型仍然是一个符号链接。

7. 随符号链接拷贝原文件

现在我们可以试一下-L选项。基本上,这个刚好与上面的 -P 选项 相反。下面是个示例:

$ cp -L file_6.txt ./movie

Copy using -L option

使用这个选项,拷贝的文件将会和file\_6.txt原文件一样。我们可以从文件大小看出来。拷贝的文件有50 字节而当file\_6.txt作为符号链接时文件大小只有33 字节

8. 文件归档

当我们去拷贝一个目录时,我们会用-r或者-R选项。但是我们也可以用-a选项来归档文件。这样会创建文件和目录的准确套录,如果有的话也可以包括符号链接。下面是示例:[译注:-a 会保留原文件或目录的属性]

$ cp -a directory_1/ /home/pungki/office

Copy using -a option

上列的命令会拷贝一个名为 directory1 的目录到/home/pungki/office目录下。如你所见,**file6.txt**依然作为符号链接被复制。

9. 显示正在做什么

默认情况下,当拷贝作业成功时,我们仅仅会再次看到命令提示符。如果你想了解在拷贝文件时都发生了什么,我们可以用 -v 选项。

$ cp -v *.txt /home/pungki/office

Verbose option

当我们从当前目录下拷贝所有的 txt 文件到 /home/pungki/office 目录,-v选项会显示正在操作的过程。这些额外的信息会帮助我们了解更多拷贝过程。

10. 当原文件较目标文件新时拷贝

我们用 -u选项来实现。下面是具体示例:

$ cp -vu *.txt /home/pungki/office

Copy only if newer

起初我们看到file\_1.txt 是0字节大小。然后我们用 vi 编辑,加入一些内容并保存。接下来,我们发现文件大小已经变为了 36 个字节。 与此同时在/home/pungki/office目录中,我们已经包含了所有txt文件。当我们用 -u 选项,结合 -v 选项来查看具体操作,cp 命令会只拷贝比目标目录下新的文件。因此,我们看到只有 file\_1.txt 拷贝到 /home/pungki/office 目录下

11. 使用交互模式

交互模式下会询问是否覆盖目标目录下的文件。使用 -i 选项,启用交互模式。

$ cp -ir directory_1/ /home/pungki/office/

Interactive mode

12. 创建备份文件

当目标目录已经含有同名文件,默认情况下 cp 命令会覆盖目标目录下的同名文件。使用 --backup 选项,cp 命令会为每一个现有的目标文件做一个备份。../office 相对于 /home/pungki/office 。下面是示例:

$ cp --backup=simple -v *.txt ../office

Backup option

正如我们看到的,--backup=simple 选项会创建一个在文件名末尾用波浪符标记(~)的备份文件。--backup 选项也有一些其他控制:

  • none, off:从不备份(即使给出 --backup)
  • numbered, t:用编号备份
  • existing, nil :如果编号备份存在则使用编号备份,否者用简易备份[译注:也就是用波浪号]
  • simple, never :总是使用简易备份

13. 只拷贝文件属性

cp 命令也提供给我们 --attributes-only 选项。顾名思义,这个选项只会拷贝文件名及其属性,不会拷贝任何数据。下面是示例:

$ cp --attributes-only file_6.txt -v ../office

Copy attributes only

从上图看出, 原文件 file\_6.txt 有 50 字节大小。用了 --attributes-only选项,拷贝的文件只有0字节大小。这是因为文件内容并没有拷贝。

14. 强制拷贝

用了 -f 选项会强制进行拷贝操作。如果目标文件不能打开,可以用 -f 尝试一下。

$ cp -f *.txt -v ../office

Copy with force

15. 在拷贝之前先删除目标

我们可以用,--remove-destination 选项 实现。这个选项与上面的-f选项形成对照。如果 cp 命令在目标目录下发现同名文件, cp 命令会先删除目标文件,然后再拷贝一份新的。下面是示例:

$ cp --remove-destination *.txt -v ../office

Remove destination option

总结

cp 命令是 Linux 下最基础的命令之一。对于那些想要学习 Linux 的人,必须得把这个命令掌握。当然你也可以在你的终端下键入 man cp 或者 cp --help 来显示更多帮助信息。


via: http://linoxide.com/linux-command/linux-cp-command/

译者:Luoxcat 校对:Mr小眼儿

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

Linux 和 Unix 属于多任务的操作系统,也就是说一个系统在同一时间段内能运行多重任务(进程)。在这个新的博客系列,我将会列出相关的 Linux 和 Unix 作业(job)控制的命令,你可以通过这些命令在 Bash 或 Korn 还有 POSIX shell 下实现执行多重任务。

什么是作业控制?

作业控制不只是能够停止/挂起(stop/suspend)正在执行的进程(命令),也可以继续/唤醒(continue/resume)执行你需要的每一个进程。这完全可以用你的操作系统和 bash/ksh 之类的 shell 或 POSIX shell 完成。

谁给作业控制的提供了环境?

Bash / Korn shell,或者是 POSIX shell 提供给了作业控制的环境。

跟作业表打个招呼吧

你的 shell 会留有一张当前作业的表单,称为作业表。当你键入命令时,shell 会给它分配一个 jobID(也称作 JOBSPEC)。一个 jobID 或 JOBSPEC只是很小的整数数值。

1: 创建你的首个 Linux/Unix 作业

我要运行一个名为 xeyes 的命令,它会在屏幕上显示两个椭圆的眼睛,输入: $ xeyes &

输出样例:

Fig.01: 在后台运行 xeyes 命令

我使用&符号让一个 job 在后台运行。shell 会打印一行信息类似如下:

[1] 6891

在这个例子中,有两个数字输出,分别表示:

  • 1 : 在后台执行的 xeyes 任务的作业号为 1。
  • 6891 : 作业1的进程ID。

我在多执行一些 job:

## 启动一个文本编辑器,X 的系统负载显示,和 sleep 命令 ##
gedit /tmp/hello.c &
xload &
sleep 100000 &

2: 列出当前的作业

查看当前 shell 的激活的任务状态,输入:

$ jobs
$ jobs -l

输出如下:

[1]   9379 Running                 xeyes &
[2]   9380 Running                 gedit /tmp/hello.c &
[3]-  9420 Running                 xload &
[4]+  9421 Running                 sleep 100000 &

简要描述如下:

字段描述示例
1[1]jobIDJOB\_SPEC - 工作号要与fg, bg, wait, kill和其他shell命令一起使用。你必须在工作号前缀添加一个百分号:(**%**)。加号 (+) 标识着默认的或是现在的作业。减号 (-) 标识着前一个作业。%1`fg %1`kill %2
29379进程 ID - 系统自动为每个进程创建并分配地独有的身份标志号。kill 9379
3Running状态 - 关于作业的状态:**Running** - 该 作业正在运行,还没有被外部信号挂起。**Stopped** - 该作业已经被挂起。N/A
4xeyes &command - 由shell给出的命令。script &firefox url&

你也可以用 ps 命名列出当前系统正在运行的进程:

$ ps

3: 停止或挂起正在运行的作业

按下[Ctrl]-[Z]键或使用kill 命令,如下所示:

kill -s stop PID

举个例子,启动ping 命令,然后用 Ctrl-Z 键来停止 ping 命令作业:

Animated gif 01: 挂起 ping 命令作业

4: 在前台恢复 挂起的/停止的作业

让我们恢复处于停止状态下的作业,让它回到前台继续运行,要将其变成当前作业,必须借助fg 命令。具体语法如下:

## ping 命令的作业号的值为5 ##
fg %5

我也可以规定命令行开端符合字符串"ping"的作业[译注:不能出现不明确的字符串,例如如果后台有两个 vim 进程而你敲入 fg %vim 会报错。]:

## %String ##
fg %ping

输出样例:

64 bytes from www.cyberciti.biz (75.126.153.206): icmp_req=3 ttl=53 time=265 ms
64 bytes from www.cyberciti.biz (75.126.153.206): icmp_req=4 ttl=53 time=249 ms
64 bytes from www.cyberciti.biz (75.126.153.206): icmp_req=5 ttl=53 time=267 ms
^C

5: 在后台恢复 挂起/停止状态的作业

在这个例子中,我使用yum 命令更新所有安装在 Redhat 或 CentOS Linux 生产服务器上的软件包并置于后台作业。

# yum -y update &>/root/patch.log &

然而,由于一些原因(例如,过载问题)我决定停止这个作业20分钟:

# kill -s stop %yum

输出样例:

[7]+  Stopped                 yum -y update &>/root/patch.log &

用 bg 重启停止在后台的 yum 进程

现在,我将要恢复停止的 yum -y update &>/root/patch.log & 作业,键入:

# bg %7

或者:

# bg %yum

输出样例:

[7]+ yum -y update &>/root/patch.log &

6: 杀死作业/进程

杀死yum 命令进程,输入如下kill 命令及其作业号 7:

# kill %7

或者

# kill 进程ID

输出样例:

[7]+  Terminated              yum -y update &>/root/patch.log &

在 Linux/FreeBSD/OS X Unix 下你也可以使用 killall 命令通过名字杀死进程或是 jobID 而不是通过 PID

7 为什么当我登出后 shell 会清除我的所有后台作业

在这个例子中,我将会启动 pdfwriter.py 来批量生成这个站点的 pdf 文件:

~/scripts/www/pdfwriter.py --profile=faq --type=clean --header=logo\
--footer-left "nixCraft is GIT UL++++ W+++ C++++ M+ e+++ d-" \
--footer-right "Page [of] of [total]" &

一旦当我登出shell时,pdfwriter.py 作业就会被我的 shell 杀死。为了克服这个问题需要使用shell的内置命令 disown 来告诉 shell 不要发送 HUP 信号,键入:

$ ~/scripts/www/pdfwriter.py --profile=faq .... &
$ disown
$ exit

8 使用一个名为 nohup 的外部命令阻止在登出时杀死作业

你也可以使用nohup 命令在你退出 shell 后执行作业:

$ nohup ~/scripts/www/pdfwriter.py --profile=faq .... &
$ exit

9: 查找最后的作业的 PID

为了查找最近在后台执行的(异步)命令的进程ID,可使用 bash shell 的特殊参数 $!

$ gedit foo.txt &
$ echo "最近在后台执行的job 的PID - $!" 

输出样例:

最近在后台执行的job 的PID - 9421

10: 等候作业完成

wait 命令会等候给予的进程ID 或 作业ID指定的进程,然后报告它的终止状态。语法如下:

/path/to/large-job/command/foo &
wait $!
/path/to/next/job/that-is-dependents/on-foo-command/bar

这是我的一个工作脚本:

#!/bin/bash
# A shell script wrapper to create pdf files for our blog/faq section
########################################################################
# init() - Must be run first 
# Purpose - Create index file in $_tmp for all our wordpress databases 
########################################################################
init(){
 _php="/usr/bin/php"
 _phpargs="-d apc.enabled=0"
 _base="~/scripts"
 _tmp="$_base/tmp"
 _what="$1"
 for i in $_what
 do
        [[ ! -d "$_tmp/$i" ]] && /bin/mkdir "$_tmp/$i"
        $_php $_phpargs -f "$_base/php/rawsqlmaster${i}.php" >  "$_tmp/$i/output.txt"
 done
}

#####################################################
# Without index file, we can out generate pdf files
#####################################################
init blog

###########################################################
# Do not run the rest of the script until init() finished
###########################################################
wait $!

## Alright, create pdf files 
~/scripts/www/pdfwriter.py --profile=blog --type=clean --header=logo\
--footer-left "nixCraft is GIT UL++++ W+++ C++++ M+ e+++ d-" \
--footer-right "Page [of] of [total]"

Linux 和 Unix 作业控制命令总结列表

命令描述示例
**&**将作业置入后台命令 &
**%n**设置作业号为 n (数字)的作业命令 %1
**%Word**引用命令行开端包含 Word 的作业命令 %yum
**%?Word**引用命令行包含 Word 的作业命令 %?ping
**%%**`%+`引用当前作业kill %%kill %+
**%-**引用先前作业bg %-
**CTRL-Z**kill -s stop jobID``挂起或停止作业kill -s stop %ping
**jobs**jobs -l``列出活动的作业jobs -l
**bg**将 作业置入后台bg %1bg %ping
**fg**将作业置入前台fg %2fg %apt-get

关于 shell 内置命令和外部命令的小注

运行下面的 type 命令找出给予命令是否属于内部或外部的。

type -a fg bg jobs disown

输出样式:

fg is a shell builtin
fg is /usr/bin/fg
bg is a shell builtin
bg is /usr/bin/bg
jobs is a shell builtin
jobs is /usr/bin/jobs
disown is a shell builtin

在几乎所有情况下,你都需要使用 shell 的内置命令。所有外部命令例如 /usr/bin/fg 或 /usr/bin/jobs 工作在一个不同的 shell 环境下,而不能用在父 shell 的环境下。

总结

我希望你能喜欢这篇博文系列(rss 订阅),我建议你阅读下面的更多信息:

我会计划在这个系列添加更多深入的教程。若果你需要看到具体的主题,请在下方评论让我知道。


via: http://www.cyberciti.biz/howto/unix-linux-job-control-command-examples-for-bash-ksh-shell/

译者:Luoxcat 校对:wxy

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