共 7 页, « 1 [2] 3 4 5 » ... 最后一页 »
所谓交互式的rpm包,就是说在安装过程中接受用户输入,来完成诸如许可证确认、创建配置文件等工作。
首先要说明,不推荐使用rpm创建交互式安装包。rpm的设计目标就是在完全不需要用户干涉的前提下完成软件的安装、升级等工作,这样可以通过cron或者yum/apt/up2date等脚本完成自动安装和自动升级。而交互式rpm包将破坏这种特性。另外,通过图形界面安装rpm包时,交互式脚本将完全不能执行(因为没有终端)。因此,在rpm中执行脚本时,标准输入是被关闭的,也就是说你无法在rpm安装过程中获得任何用户输入。
但有时真的需要创建交互式rpm包,如迫于工作压力,或者创建内部使用的安装程序,或者作为产品分发给完全不懂计算机的用户等。虽然rpm中的脚本无法获取用户输入,但方法总是人想出来的。
我们知道在spec文件的%post节中可以书写bash脚本,而通过read命令可以获取用户输入。但如果在%post中使用read命令,你会发现read并不等到你输入而是直接就结束了。原因就是rpm安装时关闭了标准输入。我们可以手动将它重新打开,方法就是在read之前加入以下代码:
exec 6<&0 0</dev/tty # 将标准输入保存到6,然后在标准输入上打开/dev/tty read MYVAR exec 0<&6 6<&- # 恢复备份的标准输入并关闭6
当然标准输入(0)本身就是关闭的,所以不备份应该也无所谓。/dev/tty是指向用户控制台的一个链接,在命令行控制台和远程终端的情况下都可以正确使用。
这篇文章翻译自这里, 是一篇关于制作RPM包中的一个比较难于理解的地方。 不做开发的同学就不要看了。
阅读全文 »最近发现公司的小孩儿们都开始学Linux了,可惜学的都是那些超级麻烦的命令,唉。 其实Linux这样用更简单些……
改IP,可以用 netconfig,可惜每次都得输入完整的IP、掩码、网关和DNS。 不如直接 vi /etc/sysconfig/network-scripts/ifcfg-eth0 再 /etc/init.d/network restart 来得快。
改DNS,最快的就是 vi /etc/resolv.conf,不用重启。
重启httpd,/etc/init.d/httpd restart 要比 service httpd restart快,因为前者可以补齐而后者不能。
修改系统服务,用chkconfig要比setup方便。
看最新的log,用 tail -f /var/log/xxx.log 比 vi /var/log/xxx.log 方便。 看不清的话就先 clear 再 tail -n 0 -f /var/log/xxx.log。
用好bash的历史记录。
压缩解压缩别动不动就tar czvf/tar xzvf,要养成不用v的好习惯。文件多了要快上好几倍。
两台机器传文件,scp 要比samba方便。windows的话就装个cygwin,或者用PuTTY自带的pscp.exe也行。
测试网络连接,nc 192.168.1.10 80 要比 telnet 192.168.1.10 80 好用。
修改samba配置,直接修改 /etc/samba/smb.conf 要比图形界面方便。
今天更换公司的开发服务器时用到了这两条命令,做个记录先。
如何导出PostgreSQL数据库中的数据:
$ pg_dump -U postgres -d mydatabase -f dump.sql
导入数据时首先创建数据库再用psql导入:
$ createdb newdatabase $ psql -d newdatabase -U postgres -f dump.sql
下面对fcicq中的这篇文章 别拿这些太当回事: 就这些命令做一些解释, 做个深入浅出版的哈。
其实就是这些命令的排列组合:
- awk用于写简单脚本;
- sed用于正则表达式替换;
- sort用于排序;
- uniq用于统计。
某个功能被编译到so文件中,那么如何通过php来调用它? 一个方法是写一个php模块(php extension),在php中调用该模块内的函数, 再通过该模块来调用so中的函数。下面做一个简单的例子,使用的操作系统是Fedora Core 6。
阅读全文 »前两天fcicq介绍给我这个东西, 微软的powershell。 连上去之后发现要正版验证,就懒得弄了。不过对于微软的东西向来没什么兴趣。
就说这个命令行,微软从DOS时代开始就在抄袭Unix,抄好了也就罢了, 抄得四不像,好多命令行选项和Unix系统都不相同。最明显的例子莫过于netstat命令, 配服务器时最常用的就是 netstat -lnt,到了Windows下就不得不使用
netstat -an | find "LISTEN"
一长串命令来代替,最让人受不了的是find的关键词还得加双引号。
估计微软也知道自己的命令行做得不怎么样,于是推出了WSH(Windows Script Host)来解决批处理脚本的问题, 还有那个貌似功能强大的WMI对象。可是人家Linux shell编程简单又好学,会命令的就会写程序,说句文话叫“知识可重用”, 在这一点上WSH弄巧成拙,貌似强大的JScript和VBScript由于学习门槛太高而鲜有人问津。
而现在又推出了这个powershell。以前看过一些介绍,说句心里话它还是有些比较实用的命令的。 但是,再实用也不过是个玩具,就像Resource Kit里面那些工具一样。
RedHat系如何查看已安装的软件包的大小,在精简系统时很有用。
for i in `rpm -qa`; do echo -n $i; rpm -qi $i | grep Size | gawk '{ printf(" %s\n", $3); }' ; done > list
分开写就是
for i in `rpm -qa`
do
echo -n $i
rpm -qi $i | grep Size | gawk '{ printf(" %s\n", $3); }'
done > list
我们知道VMware的硬盘镜像会随着空间利用的增加而自动增长, 但使用的空间变少时,硬盘镜像文件却不会随之减小。 幸好VMware提供了shrinkg工具可以将镜像瘦身到最小。 这时需要注意的一些事项总结如下:
- 分区:不要使用RedHat Enterprise Linux的默认分区方式,默认的LVM分区无法瘦身。
- Snapshot:分发之前不要做snapshot,有snapshot的系统无法瘦身。
- 安装软件:如果你不用图形界面,就不要安装英文之外的语言包,它会给你安装许多输入法的东西,而这些东西都是要依赖于图形界面的。 不要安装开发包,那会一股脑地装进许多根本用不到的开发包。
基本的步骤如下:
- 建立虚拟机。
- 安装Linux,注意用手动分区,别选LVM,别装图形界面别装X,别装开发工具,别装英文之外的语言。
- 装好Linux之后用rpm手动安装需要的软件包。
- 配置你的开发环境。
- 用rpm删掉用不着的软件包,像蓝牙红外线glib图形库等。一般可将Linux瘦身到1G左右。
- 安装VMwareTools。这个工具需要 xorg-x11-libs 软件包,别忘了装。
- 在别的Linux机器上开个X-server,然后启动虚拟机上的VMwareTools,用shrink工具给镜像瘦身。
忙了一天做幻灯片,累死了。看来就算是自己熟悉的东西,想要给别人讲明白也不是件容易的事儿。 好在工作中发现了一个有用的命令:fc,使得今天总算有点乐趣。fc是bash的一个内部命令, 作用是修改命令历史中的命令。man bash然后搜索fc即可看到用法。
顺便总结一下bash命令行历史的用法:
- history
- 命令查看以前用过的命令行列表。
- !123
- 执行命令历史中编号为123的命令。
- !cat
- 执行最后一条以cat开头的命令。
- !!
- 执行上一条命令。
- fc
- 打开编辑器(vim)编辑上一条命令。
- fc 123
- 编辑命令历史中编号为123的命令。
- fc 123 130
- 编辑命令历史中123-130的八条命令,退出后依次执行
- fc ls
- 编辑最后一条以ls开头的命令。
- fc -s ls=cat ls
- 将最后一条以ls开头的命令中的ls替换成cat,然后执行
