linux 安装软件问题:XXX share library can not found

问题

当跑某些软件的时候,可能会遇到下面的错误:
“XXX share library” can not found
如果你可以确定这个库你已经安装好了,则可能是环境变量没有设置正确。主要环境变量就是LD_LIBRARY_PATH。

解决方法

#whereis XXX //如果库的文件名是libXXX.so
#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/the-result-of-last-commond/lib/

如想免去开机重启后的重复设置,将上面的export语句写到.bashrc文件中即可。

linux命令学习(九):eval,tail,head,seq

eval

查看系统自带的解释:

#eval [arg ...]
    The  args  are read and concatenated together into a single  
    command.  This command is then read and executed by the shell,  
    and its  exit status is returned as the value of eval.   
    If there are no args, or only null arguments, eval returns 0.

可以看出eval给shell提供了一种”根据变量的值,运行时确定所执行命令”的机制。
实践过程中遇到的一种情况就是”包含变量的变量名的赋值”操作。如下面这段代码:

//用一个for循环,给名称为test_1,test_2等变量赋值
#cat val_in_val.sh
#!/bin/bash
array=(11 22 33)
for i in $(seq 3)
do
    #下行等价于: test_1=${array[0]}   (i=0时)
    eval test_${i}=${array[$((i-1))]}

    #下面命令原理类似。其中'\'的作用是在eval执行时,
    #直接保留'$'符号而不作为求值符号处理
    #执行eval后,脚本中执行的等价于
    #echo "test_1=$test_1" (i=0时)
    eval echo "test_${i}=\$test_${i}"
done
#sh val_in_val.sh
test_1=11
test_2=22
test_3=33

用于输出文件的起始的部分数据

#head -n 2 file      //输出file文件的前两行
#head -n -2 file    //显示除最后2行之外的其他行
#head -c 2 file        //显示文件的头两个byte
#head -c -2 file    //显示除最后两个byte之外的所有内容

tail

基本用法与head类似,但是也有更多高级的用法,详细内容请查看man tail
单纯就输出而言,没有’-‘符号的作用,而是’+’符号的应用。注意与head区分开。

#tail -n 2 file        //输出file文件的最后2行
#tail -n +2 file    //输出文件除其实2行之外的内容
#tail -c 2 file        //输出file文件的最后2个byte
#tail -c +2 file    //输出file文件除起始2字节之外的内容

seq

打印一连串的数字,命令比较简单,直接上实例

#seq 4
1
2
3
4
#seq -s '#' 3 6        //替换默认的分隔符\n为'#'
3#4#5#6
#seq -f s%3g -s ' ' 3 0.5 4 //以步长0.5,按指定格式输出
s  3 s3.5 s  4
#seq -f %f -s ' ' 3 0.5 4 //浮点格式输出
3.000000 3.500000 4.00000
#seq -s '' 10 |sed 's/[0-9]/*/g'    //输出11个*
***********

KVM虚拟机镜像(disk img)的共享--尝试

共享disk文件

virt-install disk选项中有关于disk权限的参数:perms
默认值为:rw(read/write),还有ro(readonly)和sh(shared read/write)。
所以可以尝试从一个img启动多个虚拟机,但可能每个虚拟机都要有私有的根文件系统的img。
下面是Using shared storage with virtual disk images中的一些解释:
The virt-install command can be used to install new guests from the command line. The —disk argument can take the name of a storage pool, followed by the name of any contained volumes. Continuing this example, the following command will begin the installation of a guest with two disks; the first disk is the root file system, the second disk can be shared between multiple guests for common data:

# virt-install --accelerate --name rhelx86_64 --ram 800 --vnc --disk \ vol=kvmguest/10.0.0.1 --disk vol=kvmguest/10.0.0.2,perms=sh --pxe
The second disk has the <shareable/> flag set. Critical for the disk to be safely shared between guests, this ensures that the SELinux labelling will be appropriate for multiple guests to access the disk and that all I/O caching is disabled on the host.

我的设想:

首先尝试sh启动多个虚拟机,不行则尝试尝试ro+sh启动一个,然后多个虚拟机
最后实践发现将img的perms=sh的VMs可以依次起来,但是毕竟共享的是系统盘,终究还是会出现系统方面的错误,所以不推荐。

perms=sh的用途

最后可行的方式就是只共享一些纯数据盘,这样只要操作得当,基本不会出现问题。

使用virt-install搭建KVM虚拟机

virt-install安装脚本

virt-install \
#虚拟机名字
--name test \
#客户端虚拟机的名称
--ram 2048 \
#指定虚拟机的虚拟CPU数
--vcpus=1 \
#检查指定的虚拟CPU数不要超过物理CPU数
--check-cpu \
#指定虚拟机能够使用的物理CPU
--cpuset=0,2,4,6  or --cpuset=1-3,5,7-9
#指定存储配置,path指定img的存放路径,
--disk path=/path-to-img/test.img,size=20 \
#使用光驱方法安装的镜像路径
--cdrom /path-to-original-iso/xp.iso \
--import
#额外说明#若test.img存在,使用import+disk组合;若test.img不存在,使用disk+cdrom组合
#额外说明#如果test.img不存在,则从xp.iso中安装并存储到test.img中;若test.img存在,则直接读取test.img内容安装系统。
#启用KVM内核加速功能
--accelerate \
--vnc \
--keymap=en-us

Read More