疑难杂症

1、修改计算机名( /etc/hostname )后执行操作出现  sudo: unable to resolve host  *** 

/etc/hosts中存放了网址的解析  修改里面原计算机名为新计算机名

2、修改密码 :     passwd 用户名 

 

3 、安装了gdm, 觉得不爽,使用apt-get remove gdm卸载了,再重启就出问题了,一直卡在启动界面

 

直接把/etc/X11/default-display-manager中的内容由
代码:
lightdm

改为
代码:
/usr/sbin/lightdm

 dpkg -l           显示软件包列表 状态标志(安装了什么包)

iU 表示软件包未安装成功
ii 表示安装成功
rc 表示软件包已经被卸载,但配置文件仍在
4

当你在执行shell命令时,如果遇到类似“The parameter list is too long”的错误提示,那么往往是因为你的通配符匹配的文件太多而导致的。比如 rm -f *.*,而且正好你的当前目录下又有超多的文件。

原来,每一个shell都有自己的系统限制值,我们可以用getconf命令来获取到这些值。

$ getconf ARG_MAX
131072

这个就是shell对通配符匹配的限制了,单位是字节,也就是说参数字节长度最大是13万1千零72字节。超过这个长度,就会受到上述的报警了:)

解决方法是:不用rm,改用find . -name “*.*” -exec rm -f {} \;命令。

 

100、

在shell的变量赋值时,如果我执行了x=*,问题就出来了,shell是将*替换为当前目录下的文件列表然后赋值给x,还是直接将*赋值给了x呢?

给你出个主意,你执行echo $x看看出现什么东西,不久一目了然了么?

 

[rocrocket@rocrocket ~]$ myvar=*

[rocrocket@rocrocket ~]$ echo $myvar
apache-tomcat-5.5.26.tar.gz audiodump.wav Desktop Documents Download dwhelper educonn.tar.gz Music Pictures Public subversion-1.4.0-29.i586.rpm subversion-server-1.4.0-29.i586.rpm Templates Videos

明白了吧? 原来*会被自动替换为当前目录下的文件列表。

你是不是以为问题解决了,豁然开朗了。其实不然。如果你考虑比较周全,思维比较敏捷,你还会继续问问题:“这个星号的替换到底是在哪个步骤发生的?是在x=*时?还是在echo $x时?”

不买关子,其实上面我出的主意不能让我们完全看清本质。这是一个shell的知识点,直接告诉大家吧。

shell在给变量赋值时不进行文件名替换。所以当你执行x=*时,只是一个星号赋值给了x变量。真正的替换发生在echo $x时。

详细的步骤是这样的:

1 当执行x=*时,shell扫描命令行,把*赋值给x。

2 当执行echo $x时,shell先将$x替换为*

3 shell将*替换为当前目录下的文件列表

4 shell执行echo命令,将文件列表作为参数传递给它。

步骤就是这样,不难,只要记住:“变量赋值时不做匹配替换。shell先做变量替换,在做文件名替换,最后处理参数”。

posted on 2014-11-05 17:50  寒星12345678999  阅读(169)  评论(0编辑  收藏  举报