疑难杂症
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 显示软件包列表 状态标志(安装了什么包)
当你在执行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先做变量替换,在做文件名替换,最后处理参数”。