标签 启动 下的文章

我一直很好奇,在启动 Linux 系统并登录的过程中到底发生了什么事情。按下开机键或启动一个虚拟机,你就启动了一系列事件,之后会进入到一个功能完备的系统中,有时,这个过程不到一分钟。当你注销或者关机时,也是这样。

更有意思的是,在系统启动以及用户登录或注销时,还可以让系统执行特定的操作。

本文,我们将探讨一下在 Linux 操作系统中实现这些目标的传统方法。

注意:我们假定使用的是 Bash 作为登录及注销的主 Shell。如果你使用的是其他 Shell,那么有些方法可能会无效。如果有其他的疑问,请参考对应的 Shell 文档。

在启动时执行 Linux 脚本

有两种传统的方法可以实现在启动时执行命令或脚本:

方法 #1 - 使用 cron 任务

除了常用格式(分 / 时 / 日 / 月 / 周)外,cron 调度器还支持 @reboot 指令。这个指令后面的参数是脚本(启动时要执行的那个脚本)的绝对路径。

然而,这种方法需要注意两点:

  • a) cron 守护进程必须处于运行状态(通常情况下都会运行),同时
  • b) 脚本或 crontab 文件必须包含需要的环境变量(如果有的话,参考 StackOverflow 获取更多详细内容)。

方法 #2 - 使用 /etc/rc.d/rc.local

这个方法对于 systemd-based 发行版 Linux 同样有效。不过,使用这个方法,需要授予 /etc/rc.d/rc.local 文件执行权限:

# chmod +x /etc/rc.d/rc.local

然后在这个文件底部添加脚本。

下图说明如何分别使用 cron 任务和 rc.local 运行两个示例脚本(/home/gacanepa/script1.sh/home/gacanepa/script2.sh)。

script1.sh:

#!/bin/bash
DATE=$(date +'%F %H:%M:%S')
DIR=/home/gacanepa
echo "Current date and time: $DATE" > $DIR/file1.txt

script2.sh:

#!/bin/bash
SITE="Tecmint.com"
DIR=/home/gacanepa
echo "$SITE rocks... add us to your bookmarks." > $DIR/file2.txt

启动时执行 Linux 脚本

*启动时执行 Linux 脚本 *

记住,一定要提前给两个示例脚本授予执行权限:

$ chmod +x /home/gacanepa/script1.sh
$ chmod +x /home/gacanepa/script2.sh

在登录或注销时执行 Linux 脚本

要在登录或注销时执行脚本,分别需要使用 ~.bash_profile~.bash_logout 文件。多数情况下,后者需要手动创建。在每个文件的底部,添加调用脚本代码,如前面例中所示,就可以实现这个功能。

总结

本文主要介绍如何在启动、登录以及注销系统时执行脚本。如果你有其他的方法可以补充,请使用下面的评论表给我们指出,我们期待您的回应!


作者简介:

Gabriel Cánepa 是 GNU/Linux 系统管理员, 阿根廷圣路易斯 Villa Mercedes 的 web 开发人员。他为一家国际大型消费品公司工作,在日常工作中使用 FOSS 工具以提高生产力,并从中获得极大乐趣。


via: http://www.tecmint.com/auto-execute-linux-scripts-during-reboot-or-startup/

作者:Gabriel Cánepa 译者:zhb127 校对:jasminepeng

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

没有什么事情比 bootloader 坏掉更气人的了。充分发挥 Grub 2 的作用,让 bootloader 安分工作吧。

为什么这么说?

  • Grub 2 是最受欢迎的 bootloader ,几乎用在所有 Linux 发行版上。
  • bootloader 是一个至关重要的软件,但是非常容易损坏。
  • Grub 2 是兼具扩展性和灵活性的一款引导加载程序,提供了大量可定制选项。

Grub 2 是一款精彩的功能强大的软件。它不是 bootloader 界的一枝独秀,但却最受欢迎,几乎所有主要的桌面发行版都在使用它。 Grub 的工作有两个。首先,它用一个菜单展示计算机上所有已经安装的操作系统供你选择。其次,当你从启动菜单中选择了一个 Linux 操作系统, Grub 便加载这个 Linux 的内核。

你知道,如果使用 Linux ,你就离不开 bootloader 。然而它却是 Linux 发行版内部最鲜为人知的部分。在这篇文章里,我们将带你熟悉 Grub 2 一些著名的特性,强化你相关技能,使你在 bootloader 跑飞的时候能够自行处理。

Grub 2 最重要的部分是一堆文本文件和两个脚本文件。首先需要了解的是 /etc/default/grub 。这是一个文本文件,你可以在里面设置通用配置变量和 Grub 2 菜单(见下方 “常见用户设置” )的其它特性。

Grub 2 另一个重要的部分是 /etc/grub.d 文件夹。定义每个菜单项的所有脚本都放置在这里。这些脚本的名称必须有两位的数字前缀。其目的是,在构建 Grub 2 菜单时定义脚本的执行顺序以及相应菜单项的顺序。文件 00_header 首先被读取,负责解析 /etc/default/grub 配置文件。然后是 Linux 内核的菜单项,位于 10_linux 文件中。这个脚本在默认的 /boot 分区为每个内核创建一个正规菜单项和一个恢复菜单项。

紧接着的是为第三方应用所用的脚本,如 30_os-prober40_customos-prober 脚本为内核和其它分区里的操作系统创建菜单项。它能识别安装的 Linux、 Windows、 BSD 以及 Mac OS X 。 如果你的硬盘布局比较独特,使得 os-prober 无法找到已经安装的发行版,你可以在 40_custom 文件(见下方 “添加自定义菜单项”)中添加菜单项。

Grub 2 不需要你手动维护你的启动选项的配置文件:取而代之的是使用 grub2-mkconfig 命令产生 /boot/grub/grub.cfg 文件。这个功能会解析 /etc/grub.d 目录中的脚本以及 /etc/default/grub 设置文件来定义你的设置情况。

图形化的引导修复

多亏了 Boot Repair 应用,只需要点击按钮,Grub 2 许许多多的问题都能轻易解决。这个漂亮小巧的应用有一个直观的用户界面,可以扫描并识别多种硬盘布局和分区方案,还能发现并正确识别安装在其中的操作系统。这个应用可以处理传统计算机里的 主引导记录 Master Boot Record (MBR),也可以处理新型 UEFI 计算机中的 GUID 分区表 GUID Partition Table (GPT)。

Boot Repair 最简单的使用方式是安装到 Live Ubuntu 会话中。在一个 bootloader 损坏的机器上启动 Ubuntu Live 发行版,先通过添加它的 PPA 版本库来安装 Boot Repair ,命令如下:

sudo add-apt-repository ppa:yannubuntu/Boot Repair

然后刷新版本库列表:

sudo apt-get update

安装应用,如下:

sudo apt-get install -y Boot Repair

安装完毕后就启动应用。在显示它的界面(由一对按键组成)之前将会扫描你的硬盘。根据工具的指示,只需按下 Recommended Repair 推荐的修复 按钮,即可修复大部分坏掉的 bootloader 。修复 bootloader 之后,这个工具会输出一个短小的 URL ,你应该把它记录下来。这个 URL 包含了硬盘详尽的信息:分区信息以及重要的 Grub 2 文件(如 /etc/default/grub/boot/grub/grub.cfg )的内容。如果工具不能解决 bootloader 的问题,可以把你这个 URL 共享在你的发行版的论坛上,让其他人可以分析你的硬盘布局以便给你建议。

Boot Repair 也可以让你定制 Grub 2 的选项。

Bootloader 急救

Grub 2 引导问题会让系统处于几种不同状态。屏幕(如你所想,本该显示 bootloader 菜单的地方)所展示的文本会指示出系统的当前状态。如果系统中止于 grub> 提示符,表明 Grub 2 模块已经被加载,但是找不到 grub.cfg 文件。当前是完全版的 Grub 2 命令行 shell,你可以通过多种方式解决此问题。如果你看到的是 grub rescue> 提示符,表明 bootloader 不能找到 Grub 2 模块或者找不到任何 引导文件 boot files 。然而,如果你的屏幕只显示 ‘GRUB’ 一词,表明 bootloader 找不到通常位于 主引导记录 Master Boot Record 里的最基本的信息。

你可以通过使用 live CD 或者在 Grub 2 shell 中修正此类错误。如果你够幸运, bootloader 出现了 grub> 提示符,你就能获得 Grub 2 shell 的支配权,来帮助你排错。

接下来几个命令工作在 grub>grub rescue> 提示符下。 set pager=1 命令设置显示 分页 pager ,防止文本在屏幕上一滚而过。你还可以使用 ls 命令列出 Grub 识别出的所有分区,如下:

grub> ls
(hd0) (hd0,msdos5) (hd0,msdos6) (hd1,msdos1)

如你所见,这个命令列出分区的同时一并列出了分区表方案(即 msdos)。

你还可以在每个分区上面使用 ls 来查找你的根文件系统:

grub> ls (hd0,5)/
lost+found/ var/ etc/ media/ bin/ initrd.gz
boot/ dev/ home/ selinux/ srv/ tmp/ vmlinuz

你可以不写上分区名的 msdos 部分。同样,如果你忘记了尾部的 斜杠 trailing slash 只输入 ls (hd0,5) ,那你将获得分区的信息,比如文件系统类型、总体大小和最后修改时间。如果你有多个分区,可以使用 cat 读取 /etc/issue 文件中的内容,来确定发行版,格式如 cat (hd0,5)/etc/issue

假设你在 (hd0,5) 中找到根文件系统,请确保它包含 /boot/grub 目录,以及你想引导进入的内核镜像,如 vmlinuz-3.13.0-24-generic 。此时输入以下命令:

grub> set root=(hd0,5)
grub> linux /boot/vmlinuz-3.13.0-24-generic root=/dev/sda5
grub> initrd /boot/initrd.img-3.13.0-24-generic

第一个命令把 Grub 指向我们想引导进入的发行版所在的分区。接着第二个命令告知 Grub 内核镜像在分区中的位置,以及根文件系统的位置。最后一行设置 虚拟文件系统 initial ramdisk 文件的位置。你可以使用 tab 补全功能补全内核名字和 虚拟文件系统 initrd: initial ramdisk 的名字,节省时间和精力。

输入完毕,在下一个 grub> 提示符后输入 boot , Grub 将会引导进入指定的操作系统。

如果你在 grub rescue> 提示符下,情况会有些许不同。因为 bootloader 未能够找到并加载任何必需的模块,你需要手动添加这些模块:

grub rescue> set root=(hd0,5)
grub rescue> insmod (hd0,5)/boot/grub/normal.mod
grub rescue> normal
grub> insmod linux

如上所示,跟之前一样,使用 ls 命令列出所有分区之后,使用 set 命令标记起来。然后添加 normal 模块,此模块激活时将会恢复到标准 grub> 模式。如果 linux 模块没加载,接下来的命令会进行添加。如果这个模块已经加载,你可以跟之前一样,把引导加载程序指向内核镜像和 虚拟文件系统 initrd 文件,然后使用 boot 启动发行版,完美收官。

一旦成功启动发行版,别忘了为 Grub 重新产生新的配置文件,使用

grub-mkconfig -o /boot/grub/grub.cfg

命令。你还需要往 MBR 里安装一份 bootloader 的拷贝,使用

sudo grub2-install /dev/sda

命令。

想要禁用 /etc/grub.d 目录下的脚本,你只需移除其可执行位,比如使用 chmod -x /etc/grub.d/20_memtest86+ 就能将 ‘Memory Test’ 选项从菜单中移除。

Grub 2 和 UEFI

在支持 UEFI 的机器(最近几年上市的机器大部分都是)调试坏掉的 Grub 2 增加了另一复杂的层次。恢复安装在 UEFI 机器上的 Grub 2 的和安装在非 UEFI 机器上的并没多大区别,只是新的固件处理方式不一样,从而导致了很多种恢复结果。

对于基于 UEFI 的系统,不要在 MBR 上安装任何东西。相反,你要在 EFI 系统分区 EFI System Partition ( ESP )里安装 Linux EFI bootloader,并且借助工具把它设置为 EFI 的默认启动程序,这个工具对于 Linux 用户是 efibootmgr ,对于 window 用户则是 bcdedit

照目前情况看,在安装任何与 Windows 8 兼容的主流桌面 Linux 发行版前,应该正确安装好 Grub 2。然而,如果 bootloader 损坏,你可以使用 live 发行版修复机器。在启动 live 介质之时,请确保是以 UEFI 模式启动。计算机每个可移动驱动器的启动菜单将会有两个: 一个普通的和一个以 EFI 标记的。使用后者会用到 /sys/firmware/efi/ 文件中的 EFI 变量。

在 live 环境中,挂载教程前面所提的安装挂掉系统的根文件系统。除此之外,还需要挂载 ESP 分区。假设分区是 /dev/sda1 ,你可以如下所示挂载:

sudo mount /dev/sda1 /mnt/boot/efi

接着在 chroot 到安装完毕的发行版前之前,使用 modprobe efivars 加载 efivars 模块。

在这里, Fedora 用户可以使用如下命令重新安装 bootloader

yum reinstall grub2-efi shim

但在此之前,需要使用

grub2-mkconfig -o /boot/grub2/grub.cfg

来产生新的配置文件。 Ubuntu 用户则改用以下命令

apt-get install --reinstall grub-efi-amd64

一旦 bootloader 正确就位,退出 chroot ,卸载所有分区,重启到 Grub 2 菜单。

伙计,我的 Grub 哪去了?

Grub 2 最好的特性是可以随时重新安装。因此,当其它像 Windows 之类的系统用它们自己的 bootloader 替换后,导致 Grub 2 丢失,你可以使用 live 发行版,寥寥数步即可重装 Grub 。假设你在 /dev/sda5 安装了一个发行版,若要重装 Grub ,你只需首先使用以下命令为发行版创建一个挂载目录:

sudo mkdir -p /mnt/distro

然后挂载分区,如下:

mount /dev/sda5 /mnt/distro

接着就能重装 Grub 了,如下:

grub2-install --root-directory=/mnt/distro /dev/sda

这个命令会改写 /dev/sda 设备上的 MBR 信息,指向当前 Linux 系统,并重写一些 Grub 2 文件,如 grubenvdevice.map

另一个问题常见于装有多个发行版的计算机上。当你安装了新的 Linux 发行版,它的 bootloader 应当要能找到所有已经安装的发行版。一旦不行,只要引导进入新安装的发行版,并运行

grub2-mkconfig

在运行这个命令之前,请确保启动菜单中缺失的发行版的 root 分区已经挂载。如果你想添加的发行版有单独的 /root/home 分区,在运行 grub2-mkconfig 之前,只需挂载包含 /root 的分区。

虽然 Grub 2 能够找到大部分发行版,但是在 Ubuntu 中尝试添加安装的 Fedora 系统需要额外的一个步骤。如果你以默认设置安装了 Fedora ,则发行版的安装器已经创建了 LVM 分区。此时你需要使用发行版的包管理系统安装 lvm2 驱动,如下

sudo apt-get install lvm2

才能使得 Grub 2 的 os-prober 脚本能够找到并将 Fedora 添加进启动菜单。

常见用户设置

Grub 2 有很多可配置变量。 这里有一些 /etc/default/grub 文件中你最可能会修改到的常见变量。 GRUB\_DEFAULT 变量指定默认的启动项,可以设置为数字值,比如 0 ,表示第一个菜单项,或者设置为 “saved” ,将指向上一次启动时选中的菜单项。 GRUB\_TIMEOUT 变量指定启动默认菜单项之前的停留时间。 GRUB\_CMDLINE\_LINUX 列出了要传递给所有 Linux 菜单项的内核命令行参数。

如果 GRUB\_DISABLE\_RECOVERY 变量设置为 true ,那么将不生成恢复模式菜单项。这些菜单项会以单用户模式启动发行版,这种模式下允许你利用命令行工具修复系统。 GRUB\_GFXMODE 变量同样有用,它指定了菜单上文本显示的分辨率,它可以设置为你的显卡所支持的任何数值。

Grub 2 有个命令行模式,通过在 bootloader 菜单上按 C 进入。

彻底的修复

如果 grub2-install 命令不能正常运作,使得你无法引导进入 Linux ,你需要完整地重装以及重新配置 bootloader 。为此目的,需要用到强大的 chroot 功能将运行环境从 live CD 环境切换至我们想修复的 Linux 的安装位置。任何拥有 chroot 工具的 Linux live CD 都可以实现这个目的。不过需要确保 live 介质的系统架构和硬盘上系统的架构一致。因此当你希望 chroot 到 64 位系统,你必须使用 amd64 live 发行版。

启动进入 live 发行版之后,首先需要检查机器上的分区。使用 fdisk -l 列出磁盘上所有分区,记录你想修复的 Grub 2 系统所在的分区。

假设我们希望从安装在 /dev/sda5 中的发行版中恢复 bootloader 。启动终端使用如下命令挂载分区:

sudo mount /dev/sda5 /mnt

此时需要 绑定 bind Grub 2 bootloader 需要进入的目录,以便检测其它操作系统:

$ sudo mount --bind /dev /mnt/dev
$ sudo mount --bind /dev/pts /mnt/dev/pts
$ sudo mount --bind /proc /mnt/proc
$ sudo mount --bind /sys /mnt/sys

此时可以离开 live 环境进入安装在 /dev/sda5 分区中的发行版了,通过 chroot

$ sudo chroot /mnt /bin/bash

现在可以安装、检测、以及升级 Grub 了,跟之前一样,使用

sudo grub2-install /dev/sda

命令来重装 bootloader 。因为 grub2-install 命令不能创建grub.cfg 文件,需要手动创建,如下

sudo grub-mkconfig -o /boot/grub/grub.cfg

这样应该就可以了。现在你就有了 Grub 2 的一份全新拷贝,罗列了机器上所有的操作系统和发行版。在重启电脑之前,你需要依次退出 chroot 系统,卸载所有分区,如下所示:

$ exit
$ sudo umount /mnt/sys
$ sudo umount /mnt/proc
$ sudo umount /mnt/dev/pts
$ sudo umount /mnt/dev
$ sudo umount /mnt

现在你可以安全地重启电脑了,而它应该会回退到 Grub 2 的控制之中,你已经修好了这个 bootloader。

添加自定义菜单项

如果希望往 bootloader 菜单里添加菜单项,你需要在 40\_custom 文件里添加一个 启动段 boot stanza 。例如,你可以使用它展示一个菜单项来启动安装在可移动 USB 驱动里的 Linux 发行版。假设你的 USB 驱动器是 sdb1 ,并且 vmlinuz 内核镜像和 虚拟文件系统 initrd 都位于根 (/)目录下,在 40\_custom 文件中添加以下内容:

menuentry “Linux on USB” {
   set root=(hd1,1)
   linux /vmlinuz root=/dev/sdb1 ro quiet splash
   initrd /initrd.img
}

相比使用设备和分区名,使用它们的 UUID 可以获得更精确结果,比如

set root=UUID=54f22dd7-eabe

使用

sudo blkid

来获得所有已连接的驱动器和分区的 UUID 。你还可以为你磁盘上没被 os-prober 脚本找到的发行版添加菜单项,只要你知道该发行版的安装位置以及其内核和 虚拟文件系统 initrd 的位置即可。


via: https://www.linuxvoice.com/grub-2-heal-your-bootloader/

作者:Mayank Sharma 译者:soooogreen 校对:wxy

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

大多数 Linux 发行版都会提供一个可以从 USB 启动的 live 环境,以便用户无需安装即可测试系统。我们可以用它来评测这个发行版或仅仅是当成一个一次性系统,并且很容易将这些文件复制到一个 U 盘上,在某些情况下,我们可能需要经常运行同一个或不同的 ISO 镜像。GRUB 2 可以配置成直接从启动菜单运行一个 live 环境,而不需要烧录这些 ISO 到硬盘或 USB 设备。

获取和检查可启动的 ISO 镜像

为了获取 ISO 镜像,我们通常应该访问所需的发行版的网站下载与我们架构兼容的镜像文件。如果这个镜像可以从 U 盘启动,那它也应该可以从 GRUB 菜单启动。

当镜像下载完后,我们应该通过 MD5 校验检查它的完整性。这会输出一大串数字与字母合成的序列。

将这个序列与下载页提供的 MD5 校验码进行比较,两者应该完全相同。

配置 GRUB 2

ISO 镜像文件包含了整个系统。我们要做的仅仅是告诉 GRUB 2 哪里可以找到 kernel 和 initramdisk 或 initram 文件系统(这取决于我们所使用的发行版)。

在下面的例子中,一个 Kubuntu 15.04 live 环境将被配置到 Ubuntu 14.04 机器的 Grub 启动菜单项。这应该能在大多数新的以 Ubuntu 为基础的系统上运行。如果你是其它系统并且想实现一些其它的东西,你可以从这些文件了解更多细节,但这会要求你拥有一点 GRUB 使用经验。

这个例子的文件 kubuntu-15.04-desktop-amd64.iso 放在位于 /dev/sda1/home/maketecheasier/TempISOs/ 上。

为了使 GRUB 2 能正确找到它,我们应该编辑

/etc/grub.d40-custom

menuentry "Kubuntu 15.04 ISO" {
set isofile="/home/maketecheasier/TempISOs/kubuntu-15.04-desktop-amd64.iso"
loopback loop (hd0,1)$isofile
echo "Starting $isofile..."
linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=${isofile} quiet splash
initrd (loop)/casper/initrd.lz
}

分析上述代码

首先设置了一个变量名 $menuentry ,这是 ISO 文件的所在位置 。如果你想换一个 ISO ,你应该修改 isofile="/path/to/file/name-of-iso-file-.iso".

下一行是指定回环设备,且必须给出正确的分区号码。

loopback loop (hd0,1)$isofile

注意 hd0,1 这里非常重要,它的意思是第一硬盘,第一分区 (/dev/sda1)。

GRUB 的命名在这里稍微有点困惑,对于硬盘来说,它从 “0” 开始计数,第一块硬盘为 #0 ,第二块为 #1 ,第三块为 #2 ,依此类推。但是对于分区来说,它从 “1” 开始计数,第一个分区为 #1 ,第二个分区为 #2 ,依此类推。也许这里有一个很好的原因,但肯定不是明智的(明显用户体验很糟糕)..

在 Linux 中第一块硬盘,第一个分区是 /dev/sda1 ,但在 GRUB2 中则是 hd0,1 。第二块硬盘,第三个分区则是 hd1,3, 依此类推.

下一个重要的行是:

linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=${isofile} quiet splash

这会载入内核镜像,在新的 Ubuntu Live CD 中,内核被存放在 /casper 目录,并且命名为 vmlinuz.efi 。如果你使用的是其它系统,可能会没有 .efi 扩展名或内核被存放在其它地方 (可以使用归档管理器打开 ISO 文件在 /casper 中查找确认)。最后一个选项, quiet splash ,是一个常规的 GRUB 选项,改不改无所谓。

最后

initrd (loop)/casper/initrd.lz

这会载入 initrd ,它负责载入 RAMDisk 到内存用于启动。

启动 live 系统

做完上面所有的步骤后,需要更新 GRUB2:

sudo update-grub

当重启系统后,应该可以看见一个新的、并且允许我们启动刚刚配置的 ISO 镜像的 GRUB 条目:

选择这个新条目就允许我们像从 DVD 或 U 盘中启动一个 live 环境一样。


via: https://www.maketecheasier.com/run-iso-files-hdd-grub2/

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

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

在 Ubuntu 中管理开机启动应用

你曾经考虑过 在 Ubuntu 中管理开机启动应用 吗?如果在开机时,你的 Ubuntu 系统启动得非常缓慢,那么你就需要考虑这个问题了。

每当你开机进入一个操作系统,一系列的应用将会自动启动。这些应用被称为‘开机启动应用’ 或‘开机启动程序’。随着时间的推移,当你在系统中安装了足够多的应用时,你将发现有太多的‘开机启动应用’在开机时自动地启动了,它们吃掉了很多的系统资源,并将你的系统拖慢。这可能会让你感觉卡顿,我想这种情况并不是你想要的。

让 Ubuntu 变得更快的方法之一是对这些开机启动应用进行控制。 Ubuntu 为你提供了一个 GUI 工具来让你找到这些开机启动应用,然后完全禁止或延迟它们的启动,这样就可以不让每个应用在开机时同时运行。

在这篇文章中,我们将看到 在 Ubuntu 中,如何控制开机启动应用,如何让一个应用在开机时启动以及如何发现隐藏的开机启动应用。这里提供的指导对所有的 Ubuntu 版本均适用,例如 Ubuntu 12.04, Ubuntu 14.04 和 Ubuntu 15.04。

在 Ubuntu 中管理开机启动应用

默认情况下, Ubuntu 提供了一个Startup Applications工具来供你使用,你不必再进行安装。只需到 Unity 面板中就可以查找到该工具。

ubuntu 中的开机启动应用工具

点击它来启动。下面是我的Startup Applications的样子:

在 Ubuntu 中查看开机启动程序

在 Ubuntu 中移除开机启动应用

现在由你来发现哪个程序对你用处不大,对我来说,是 Caribou 这个软件,它是一个屏幕键盘程序,在开机时它并没有什么用处,所以我想将它移除出开机启动程序的列表中。

你可以选择阻止某个程序在开机时启动,而在开机启动程序列表中保留该选项以便以后再进行激活。点击 关闭按钮来保留你的偏好设置。

在 Ubuntu 中移除开机启动程序

要将一个程序从开机启动程序列表中移除,选择对应的选项然后从窗口右边的面板中点击移除按钮来保留你的偏好设置。

在 Ubuntu 中将程序从开机启动列表中移除

需要提醒的是,这并不会将该程序卸载掉,只是让该程序不再在每次开机时自动启动。你可以对所有你不喜欢的程序做类似的处理。

让开机启动程序延迟启动

若你并不想在开机启动列表中移除掉程序,但同时又忧虑着系统性能的问题,那么你所需要做的是给程序添加一个延迟启动命令,这样所有的程序就不会在开机时同时启动。

选择一个程序然后点击 编辑 按钮。

编辑开机启动应用列表

这将展示出运行这个特定的程序所需的命令。

在开机启动列表的程序运行所需的命令

所有你需要做的就是在程序运行命令前添加一句 sleep XX; 。这样就为实际运行该命令来启动的对应程序添加了 XX 秒的延迟。例如,假如我想让 Variety 壁纸管理应用 延迟启动 2 分钟,我就需要像下面那样在命令前添加 sleep 120;

在 Ubuntu 中延迟开机启动的程序

保存并关闭设置。你将在下一次启动时看到效果。

增添一个程序到开机启动应用列表中

这对于新手来说需要一点技巧。我们知道,在 Linux 的底层都是一些命令,在上一节我们看到这些开机启动程序只是在每次开机时运行一些命令。假如你想在开机启动列表中添加一个新的程序,你需要知道运行该应用所需的命令。

第 1 步:如何查找运行一个程序所需的命令?

首先来到 Unity Dash 面板然后搜索 Main Menu:

Ubuntu 下的程序菜单

这将展示出在各种类别下你安装的所有程序。在 Ubuntu 的低版本中,你将看到一个相似的菜单,通过它来选择并运行应用。

Ubuntu 下的 main menu

在各种类别下找到你找寻的应用,然后点击 属性 按钮来查看运行该应用所需的命令。例如,我想在开机时运行 Transmission Torrent 客户端

在 Ubuntu 下查找运行程序所需的命令

这就会向我给出运行 Transmission 应用的命令:

在 Ubuntu 下查找运行某个程序所需的命令

接着,我将用相同的信息来将 Transmission 应用添加到开机启动列表中。

第 2 步: 添加一个程序到开机启动列表中

再次来到开机启动应用工具中并点击 添加 按钮。这将让你输入一个应用的名称,对应的命令和相关的描述。其中命令最为重要,你可以使用任何你想用的名称和描述。使用上一步得到的命令然后点击 添加 按钮。

在 Ubuntu 中添加一个开机启动程序

就这样,你将在下一次开机时看到这个程序会自动运行。这就是在 Ubuntu 中你能做的关于开机启动应用的所有事情。

到现在为止,我们已经讨论在开机时可见到的应用,但仍有更多的服务,守护进程和程序并不在开机启动应用工具中可见。下一节中,我们将看到如何在 Ubuntu 中查看这些隐藏的开机启动程序。

在 Ubuntu 中查看隐藏的开机启动程序

要查看在开机时哪些服务在运行,可以打开一个终端并使用下面的命令:

sudo sed -i 's/NoDisplay=true/NoDisplay=false/g' /etc/xdg/autostart/*.desktop

上面的命令是一个快速查找和替换命令,它将在所有自动启动的程序里的 NoDisplay=false 改为 NoDisplay=true ,一旦执行了这个命令后,再次打开开机启动应用工具,现在你应该可以看到更多的程序:

在 Ubuntu 中查看隐藏的开机启动程序

你可以像先前我们讨论的那样管理这些开机启动应用。我希望这篇教程可以帮助你在 Ubuntu 中控制开机启动程序。任何的问题或建议总是欢迎的。


via: http://itsfoss.com/manage-startup-applications-ubuntu/

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

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

提问:我运行的是Ubuntu桌面,但是我希望启动后临时进入命令行。有什么简便的方法可以启动进入终端?

Linux桌面自带了一个显示管理器(比如:GDM、KDM、LightDM),它们可以让计算机启动自动进入一个基于GUI的登录环境。然而,如果你要直接启动进入终端怎么办? 比如,你在排查桌面相关的问题或者想要运行一个不需要GUI的应用程序。

注意虽然你可以通过按下Ctrl+Alt+F1到F6临时从桌面GUI切换到虚拟终端。然而,在这种情况下你的桌面GUI仍在后台运行,这不同于纯文本模式启动。

在Ubuntu或者Debian桌面中,你可以通过传递合适的内核参数在启动时启动文本模式。

启动临时进入命令行

如果你想要禁止桌面GUI并临时进入一次文本模式,你可以使用GRUB菜单。

首先,打开你的电脑。当你看到初始的GRUB菜单时,按下‘e’。

接着会进入下一屏,这里你可以修改内核启动选项。向下滚动到以“linux”开始的行,这里就是内核参数的列表。删除参数列表中的“quiet”和“splash”。在参数列表中添加“text”。

升级的内核选项列表看上去像这样。按下Ctrl+x继续启动。这会以详细模式启动控制台一次(LCTT译注:由于没有保存修改,所以下次重启还会进入 GUI)。

永久启动进入命令行

如果你想要永久启动进入命令行,你需要更新定义了内核启动参数GRUB设置

在文本编辑器中打开默认的GRUB配置文件。

$ sudo vi /etc/default/grub 

查找以GRUB\_CMDLINE\_LINUX\_DEFAULT开头的行,并用“#”注释这行。这会禁止初始屏幕,而启动详细模式(也就是说显示详细的的启动过程)。

更改GRUBCMDLINELINUX="" 成:

GRUB_CMDLINE_LINUX="text"

接下来取消“#GRUB\_TERMINAL=console”的注释。

更新后的GRUB配置看上去像下面这样。

最后,使用update-grub命令来基于这些更改重新生成/boot下的GRUB2配置文件。

$ sudo update-grub 

这时,你的桌面应该可以从GUI启动切换到控制台启动了。可以通过重启验证。


via: http://ask.xmodulo.com/boot-into-command-line-ubuntu-debian.html

译者:geekpi 校对:wxy

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

如果你想要使用多个Linux发行版,你没有那么多的选择。你要么安装到你的物理机或虚拟机中,要么以live模式从ISO文件启动。第二个选择,对硬盘空间需求较小,只是有点麻烦,因为你需要将ISO文件写入到U盘或CD/DVD中来启动。不过,这里还有另外一个可选的折中方案:把ISO镜像放在硬盘中,然后以live模式来启动。该方案比完全安装更省空间,而且功能也完备,这对于缓慢的虚拟机而言是个不错的替代方案。下面我将介绍怎样使用流行的Grub启动加载器来实现该方案。

很明显,你将需要使用到Grub,这是几乎所有现代Linux发行版都使用的。你也需要你所想用的Linux版本的ISO文件,将它下载到本地磁盘。最后,你需要知道启动分区在哪里,并怎样在Grub中描述。对于此,请使用以下命令:

# fdisk -l 

带有‘*’的就是启动分区。对于我,就是/dev/sda1,用Grub语言描述就是(hd0,1)。

作为参考,sda2就是(hd0,2),sdb1就是(hd1,1),以此类推。(你明白了吧。)

我们需要编辑什么?

首先,打开/etc/default/grub并检查以下行:

#GRUB_HIDDEN_TIMEOUT=0

需要在此行前添加‘#’进行注释。

保存,然后打开/etc/grub.d/40\_custom。

在该文件中,你将添加启动到ISO的参数。结构如下:

menuentry "[Entry's title in the grub screen]" { 
set isofile="[path to ISO file]" 
loopback loop [boot partition in Grub language]$isofile 
[some specific] arguments
}

例如,如果你想要从ISO文件启动Ubuntu,那么你就是想要添加如下行到40\_custom文件:

menuentry "Ubuntu 14.04 (LTS) Live Desktop amd64" { 
set isofile="/boot/ubuntu-14.04-desktop-amd64.iso" 
loopback loop (hd0,1)$isofile 
linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=${isofile} quiet splash 
initrd (loop)/casper/initrd.lz 
}

如果你想要启动Gparted:

menuentry "GParted Live amd64" { 
set isofile="/boot/gparted-live-0.18.0-2-amd64.iso" 
loopback loop (hd0,1)$isofile 
loopback loop $isofile 
linux (loop)/live/vmlinuz boot=live config union=aufs noswap noprompt ip=frommedia toram=filesystem.squashfs findiso=${isofile} 
initrd (loop)/live/initrd.img 
}

或者甚至是Fedora:

menuentry "Fedora 20 Live Desktop x86_64" { 
set isofile="/boot/Fedora-Live-Desktop-x86_64-20-1.iso" 
loopback loop (hd0,1)$isofile 
loopback loop $isofile 
linux (loop)/isolinux/vmlinuz0 root=live:CDLABEL=Fedora-Live-Desktop-x86_64-20-1 rootfstype=auto ro rd.live.image quiet rhgb rd.luks=0 rd.md=0 rd.dm=0 iso-scan/filename=${isofile} 
initrd (loop)/isolinux/initrd0.img 
}

注意,参数可根据发行版进行修改。幸运的是,有许多地方你可以查阅到。我喜欢这个发行版,但是还有很多其它的发行版你可以启动。同时,请注意你放置ISO文件的地方。如果你的家目录被加密或者无法被访问到,你可能更喜欢将这些文件放到像例子中的启动分区。但是,请首先确保启动分区有足够的空间。

最后,不要忘了保存40\_custom文件并使用以下命令来更新grub:

# sudo update-grub 

以便在下次启动时看到修改。

接下来做什么?

想要更多东西?好吧,那就修改下参数来玩玩。你可以启动一个ISO文件,并让它持续做一些事情。例如,如果你是个彻头彻尾的妄想症患者,想要有个可以快速清除硬盘的选项,那么可以使用DBAN来进行一些设置。现在,真的要当心啊,因为此设置会清除你的硬盘,而且在启动时也没有恢复选项:

menuentry "Darik's Boot and Nuke" { 
set isofile="/boot/dban.iso" 
loopback loop (hd0,1)$isofile 
linux (loop)/dban.bzi nuke="dwipe" silent 
}

另外一个选择

menuentry "Darik's Boot and Nuke" {
set isofile="/boot/dban.iso"
loopback loop (hd0,1)$isofile
linux (loop)/dban.bzi
}

可以显示DBAN选项,让你选择清除驱动器。当心,因为它仍然十分危险

小结一下,对于ISO文件和Grub有很多事情可做:从快速live会话到一键毁灭,都可以满足你。之后,你也可以试试启动一些针对隐私方面的发行版,如Tails

你认为从Grub启动一个ISO这个主意怎样?这是不是你想要做的呢?为什么呢?请在下面留言。


via: http://xmodulo.com/boot-iso-image-from-grub.html

作者:Adrien Brochard 译者:GOLinux 校对:wxy

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