一个人的角落,也许并没人会看到这里~~ 祝福你,工作顺心,学习快乐~

Errors in Upgrade from Fedora 21 to Fedora 22

1. Make sure your current system is up-to-date and backed up

First up, ensure that you have the most up-to-date version of Fedora 21 by updating your system using the Software application, or running the following command in the terminal:

sudo dnf update

2. Install the FedUp tool

Now, open up a Terminal and install FedUp package by using the following command line:

sudo dnf install fedup

3. Start the update with FedUp

Now your system is fully up-to-date, start the upgrade using the following command:

sudo fedup --network 22

This command will tell FedUp to download all the appropriate packages from the Fedora repositories, and prep your system for the upgrade.
4. Reboot, and upgrade

Once the FedUp command from step 3 has completed without errors, reboot your system. In the Fedora Boot Menu (i.e. grub), there will be a menu item “System Upgrade”, select that and press enter.
Boot menu with System Upgrade (fedup) option selected
Boot menu with update option selected

All the appropriate packages and upgrade tasks will now be completed automatically, and when completed you will be able to start using your newly upgraded Fedora system.

# fedup --network 22
setting up repos...
Error: can't get boot images.
The installation repo isn't currently available.
Try again later, or specify a repo using --instrepo.

Using --instrepo To special a repo :

[lanbing@LanBing-PC ~]$ setting up repos...
getting boot images...

Downloading failed: couldn't get boot images: No more mirrors to try.
Last error was: [Errno 14] curl#56 - "Proxy CONNECT aborted"

Change the /etc/yum.conf file to disable Proxy settings ,

Must issue sudo alsa force-reload on reboot (Ubuntu)

I have a problem, I have got sound working...

But only when I issue the Code:

sudo alsa force-reload

It will when play the sound that was queued to play, like the login sound.

Everytime when I restart, I have to do Code:

sudo alsa force-reload 

in order for sound to work.

 

Solution :

	sudo gedit /etc/default/acpi-support
	# Add modules to this list to have them removed before suspend and reloaded
# on resume. An example would be MODULES="em8300 yenta_socket"
#
# Note that network cards and USB controllers will automatically be unloaded
# unless they're listed in MODULES_WHITELIST
MODULES="soundcore"

1.4.7 致命的Linux命令 – Linux就是这个范儿

别以为我是在开玩笑。有些Linux命令轻则造成数据丢失,重则导致系统瘫痪。你看这位同学漫不经心,以root身份敲入了rm -rf /,强制删除 / 目录下的所有文件,这代价可是很惨痛的(相当于系统自杀)。

还有一个很好玩的例子,我用旺旺聊天的形式给你讲述:

小雪2012-08-25 15:28:10: 在你Linux系统上输入这串东西:(){ :|:& };

灰猫2012-08-25 15:28:34: 长得这么怪?

小雪2012-08-25 15:28:41: 试试看看是什么结果。谢了。

灰猫2012-08-25 15:28:44: 不好了。终端一直出现下面的提示:

	-bash: fork: retry: Resource temporarily unavailable
	-bash: fork: retry: Resource temporarily unavailable
	-bash: fork: retry: Resource temporarily unavailable
	-bash: fork: retry: Resource temporarily unavailable
	-bash: fork: retry: Resource temporarily unavailable
	-bash: fork: retry: Resource temporarily unavailable
	-bash: fork: retry: Resource temporarily unavailable
	-bash: fork: retry: Resource temporarily unavailable
	-bash: fork: retry: Resource temporarily unavailable

很惨啊。

小雪2012-08-25 15:29:02: 哈哈,真的很惨。

灰猫2012-08-25 15:29:21: Ctrl+C都是不管用的。

小雪2012-08-25 15:29:21: 即便退出这个终端也是没有用的。

灰猫2012-08-25 15:29:31: 最后全都是这个。

-bash: pipe error: Cannot allocate memory
-bash: pipe error: Cannot allocate memory

root用户搞不定,因为killall的速度受到了影响,只能重启机器了。

小雪2012-08-25 15:30:15:这就是著名fork炸弹。看来危害不小。

灰猫2012-08-25 15:30:34:别幸灾乐祸了。能告诉我什么原理吗?

小雪2012-08-25 15:31:43: 把:(){ :|:& };写成下面格式你就看懂了

:()
{
	:|:&
};

灰猫2012-08-25 15:32:13: 明白了。“:”函数里面定义操作是后台执行“:”函数重定向到“:”函数,“:”函数的递归调用。

小雪2012-08-25 15:32:15: 是滴。系统执行海量的进程直到死亡。

灰猫2012-08-25 15:32:43: 这样的代码不好分析,主要是因为不清楚“:”是可以做为函数名的。

小雪2012-08-25 15:33:12: Quite right。另外为了防止这个问题的出现,要限制赋予root权限的用户数量以及单用户的进程数。

灰猫2012-08-25 15:34:12: 哈哈。是的,拥有root权限的用户操作不慎很容易给系统造成破坏。

故事还没有结束。如何限制用户的进程数呢?我们可以在/etc/security/limits.conf文件末尾加入一行:

	*   hard   nproc  200

限制用户的进程数为200,但root用户不会受这个限制。

这个命令行还涉及shell脚本编程,我们将在后面的章节来学习。

Linux就是这个范儿 – 本书目录 

1.4.6 联机帮助——man很靠谱 – Linux就是这个范儿

遇到问题寻找帮助能加快解决问题的速度。在Linux系统上,有以下几个途径可以获得帮助:

1.         遇到问题,男人(man,其实是“手册”的简称)的帮助很靠谱。需要某个命令或者配置文件的帮助,就在终端输入:

	man 命令名

	man 配置文件

屏幕就会显示对应命令系统的帮助手册。输入“q”退出帮助浏览器。

2.         info 和 man 功能相似,但是包含更多的最新信息。

3.         使用“命令名 –help”得到一个简略容易消化的命令帮助。

4.         程序自带README文件或者其他帮助信息文件,例如在/usr/share/doc下的一些手册。

如何在man页中查找信息呢?浏览man页默认的工具是less。less的使用方法很简单。翻页用Space,查找用反斜杠“/”紧跟着正则表达式,用n查找下一个匹配项,用Shift+n查找前一个匹配项。如果这页里没有你感兴趣的,按Space翻到下页。更多的操作还是man一下less文档吧。

很多命令的man帮助页中涉及shell命令、系统调用和编程接口等多方面,而这些内容很可能会拥有相同的名字。例如“printf”,它既是shell命令,又是库函数。为了能够精确找到你需要的帮助信息,人们为它们进行了分类编号。比如3代表库函数,我们要使用这样的命令才能找到库函数printf的帮助信息:

	$ man 3 printf

否则的话,你得到的帮助信息是shell命令printf的帮助信息。可是man对帮助信息做了哪些分类,分别都用什么编号来代表的呢?这个问题我们不用管,第3章再说。当前为了解决这种分类问题我们有一个折中的办法,就是使用“-a”命令选项,它会把所有跟你给定的命令名有关的帮助信息都列出来。例如:

	$ man -a printf

慢慢看吧,如果觉得当前的信息不是你需要的,按“q”之后会显示另外一个分类的信息,直到找到自己需要的为止。当然,有些时候你可能一无所获,最大的可能就是你记错了关键字。

还有,帮助信息中的“SEE ALSO”经常是被遗忘的角落,但是我经常会在这里发现其他有用的命令或库函数,千万不要放过它。

Linux就是这个范儿 – 本书目录 

1.4.5 错误信息 – Linux就是这个范儿

	$ %boast
	bash: fg: %boast: No such job.

当命令执行成功的时候终端屏幕上不显示任何信息,但是当发生错误的时候它经常会以一定的形式汇报错误。上面我开了一个关于Linux错误信息提示的玩笑。boast是吹牛的意思。我在终端上敲入“%boast”后,终端返回错误提示“No such job”,意思是没有这样的工作。不同的命令返回的错误信息格式有所不同,但是经常有如下格式:

命令名: 执行内容: 错误信息

例如:

	$ rm jie

给出的错误返回是:

	rm: cannot remove 'jie': No such file or directory.

那究竟发生了什么情况?当rm命令要删除jie这个文件,jie这个文件不存在,产生了代号为2的错误。这个错误代号的意思就是找不到相应的文件或目录。错误代码就被自动翻译成No such file or directory。由于错误代码有限(大约有一百多种),有可能许多不同问题对应于同一个错误代码,所以理解要执行的命令和错误信息的关系很重要。得到错误信息,让我欢喜让我忧,喜的是知道发生什么样的错误,忧的是对错误信息有可能百思不得其解,不知道如何去解决,这时候就得凭经验了。

errno.h包含一个完整的基本错误代码列表。除此之外,其他一些头文件(.h)也定义了自己的一些错误代码。代码1列出了系统定义的所有错误代码及错误描述。

代码1:

#include <string.h>
#include <errno.h>
#include <stdio.h>
int main(intargc, char ** argv) {
	int i = 0;
	for(i = 0; i< 256; i++)
		printf ("errno.%02d is: %s\n", i, strerror(i));
	return 0;
}

编译此程序用命令:

	gcc -Wall strerror.c

执行程序:

	./a.out

这个程序的输出有点长,所以就不去浪费纸张了,你自己在电脑上看吧。

Linux就是这个范儿 – 本书目录 

1.4.4 快捷键 – Linux就是这个范儿

有位童鞋正在Linux系统上开发一个中文相似度匹配的项目,工作相当努力,已经达到了废寝忘食的地步,但是使用的TF-IDF[⑤]算法的计算速度还是不尽人意。这时候,他决定先停一停,换换思路,玩玩俄罗斯方块放松一下。突然老板走过来,他下意识地使用<Ctrl><Alt><d>快速隐藏桌面。还好有惊无险,没有被老板发觉在玩游戏,否则又需要一大堆的解释。老板拍了拍他的肩膀走了过去,随后他用<Ctrl><Alt><d>又恢复了原有功能的显示。

举这个好玩的例子可不是让你照着做,而是为了告诉你Linux系统提供了很多快捷键提高命令行使用的工作效率,减少键盘的敲打以及拼写错误。说几个比较实用的快捷键,见表1-2所示,其他的你自己去挖掘。

表 1-2

常用快捷键

说  明

<Tab>

在文本终端下,使用TAB自动完成命令的输入,或者显示所有的可选项。超好用!

<Shift><PgUp>

滚动文本终端输出。终端屏幕上一屏又一屏的提示信息,就可以用它向上翻滚查看这些信息

<Shift><PgDn>

回滚文本终端输出

<Ctrl><Alt><Delete>

文本终端下关机和重新启动

<Ctrl><Alt><Backspace>

关闭或重启X Window

<Ctrl>a

到正在输入的命令行的首部

<Ctrl>e

到正在输入的命令行的尾部

<Ctrl>c

终止当前进程

<Ctrl>s

停止终端传输

<Ctrl>p

上一条执行的命令

<Ctrl>n

下一条执行的命令,前提是执行过<Ctrl>p

<Ctrl>f

在当前命令输入中右移光标一个字符

<Ctrl>b

在当前命令输入中左移光标一个字符

<Alt>f

在当前命令输入中右移光标一个词

<Alt>b

在当前命令输入中左移光标一个词

<Ctrl>k

删除光标后的所有字符

<Ctrl>d

删除光标当前的字符

<Alt><Tab>

切换不同的程序窗口

<Alt><F1>

访问“开始”菜单

<Alt><鼠标左键>

拖曳并移动一个窗口

<Alt><PrintScreen>

把当前屏幕的快照存到剪贴板

<Ctrl><Alt><d>

哈哈,老板键。切换隐藏/显示桌面运行程序

 

使用快捷键太爽了!默认情况下,按TAB在bash中是可以自动补齐,但仅能自动补齐命令名和文件名。可是我们追求的目标是“更快、更高、更强”,那就安装bash-completion做个增强版的自动补齐吧。使用TAB键自动补齐几乎任何内容,包括参数、文件、目录甚至包名称等。安装方法很简单,下载到的包中包含一个bash-completion文件,将其放在/etc下。在/etc/bash.bashrc文件里加入可执行命令(这个操作需要root权限)。

	# Run bash completion code

	if [ -r /etc/bash_completion ]; then
	    # Source completion code.
	    . /etc/bash_completion
	fi

1.    更快……

举个例子。淘宝的预发环境中的Linux机器不允许直接登录。需要申请跳板机,通过跳板机才能登录预发机。在跳板机上,我们经常使用ssh 10.232.15.201操作命令,好麻烦呀。在/etc/hosts中我们加入一行“10.232.15.201 prerelease”。

然后我们使用complete -F _known_hosts ssh告诉ssh需要的主机名。一旦设置好了,我就可以通过敲[TAB]键完成主机名的输入:ssh p[TAB]。

另外你还可以定制私有命令的补齐功能,不过你需要自己编写shell脚本实现,然后把这个脚本放在/etc/bash_completion.d/下。在随后的章节,我们会学习shell脚本的编程。在学完之后,希望你会通过编写脚本产生自己的补齐功能。

2.    更高……

有的命令太长,那就把命令缩短。命令别名(alias)就起到这个作用。例如在SUSE版本中有个命令别名的文件(/etc/profile.d/alias.bash)。它里面定义了许多命令别名,例如alias ..='cd ..', 那么在终端上输入“..”就相当于输入了“cd ..”直接回到上级目录,方便不?

3.    更强……

在shell终端上还可以一下子运行多个命令,只需要用分号“;”把各个命令串起来就行:

[命令1];[命令2];[命令3]

不管执行的命令结果如何,就是勇往直前地冲呀杀呀,把这些命令最终执行掉。但是有时候,这些命令之间是有关联的,就需要改改这种傻愣愣的工作方式。我们可以用“&&”把命令连接起来,只有前一个命令执行成功才执行下一个命令:

[命令1]&&[命令2]&&[命令3]

如果需要等前一个命令执行失败才执行下一个命令,则要使用“||”把命令连接起来:

[命令1]||[命令2]||[命令3]

哎,使用命令行的技巧还真不少,我们可以考虑出版一本专门讲述Linux命令行的参考书了:)

Linux就是这个范儿 – 本书目录 


[⑤] TF-IDF(term frequency-inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术。TF-IDF是一种统计方法,用以评估一个字词对于文件集或语料库中的一份文件的重要程度。

1.4.3 基础命令的操作 – Linux就是这个范儿

提及Linux基本命令,先给你讲述一个浪漫的故事。

曾经有个男孩很喜欢一个女孩,可是不敢表白。他想了一个办法,在Linux终端上输入:

	$ echo“这周六下午2:30,能在如嘉咖啡馆一起喝咖啡吗?”> love.txt

然后回车。接着他找来那张他喜欢的鼓浪屿图片(pic.png),使用命令:

	$ cat pic.png love.txt > pic1.png

1.4.2 文本和图形的切换 – Linux就是这个范儿

方才我们介绍的方法是目前最常用的在桌面环境下执行命令的方法,但是也有很多有“洁癖”的人喜欢使用纯粹的文本终端,这就需要进行图形和文本切换了,或者干脆就关闭图形界面。我们先搞定前者,后者会在后面的章节做十分详细的介绍。

要在文本和图形界面之间来回切换非常简单,只需要使用快捷键<Ctrl><Alt><F1>~ <F6>来回切换就行,具体什么效果大家可以自己实验,这个地方不同的Linux发行版会有不同的设定,所以本书就不好做定论。一般<Crtl><Alt><F1>代表图形界面,而剩下的5组快捷键对应5个不同的文本终端,我们推荐的CentOS就是这种设定。还有的设定是<Ctrl><Alt><F7>是图形界面,其他6组快捷键是6个不同的文本终端。

一般不建议使用这种方法来操作Linux,除非你有强烈的“洁癖”或遇到有“洁癖”的系统管理员。因为这种方法你能够使用到的独立文本终端最多只有6个。而前面介绍的在图形界面中使用终端模拟器的方法,则没有文本终端数量的限制。对于一个Linux老手来讲,文本终端永远都是多多益善的。很快你们就会有这种感觉了。

Linux就是这个范儿 – 本书目录