Linux绿色版软件expect

Linux中因为种种原因不允许安装软件,那么就是说只能用解压即可使用的那种。

这次以expect(自动应答)软件为例。

0x00:安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
[root@node1 ~]# yum install -y expect
已加载插件:fastestmirror, priorities, product-id, search-disabled-repos, subscription-manager
 
This system is not registered with an entitlement server. You can use subscription-manager to register.
 
=====
中间略
 
=====
 
依赖关系解决
 
===================================================================================================================
 Package                 架构                    版本                              源                         大小
===================================================================================================================
正在安装:
 expect                  x86_64                  5.45-14.el7_1                     c7-media                  262 k
为依赖而安装:
 tcl                     x86_64                  1:8.5.13-8.el7                    c7-media                  1.9 M
 
事务概要
===================================================================================================================
安装  1 软件包 (+1 依赖软件包)
 
总下载量:2.1 M
安装大小:4.9 M
Downloading packages:
-------------------------------------------------------------------------------------------------------------------
总计                                                                               2.8 MB/s | 2.1 MB  00:00:00    
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安装    : 1:tcl-8.5.13-8.el7.x86_64                                                                      1/2
  正在安装    : expect-5.45-14.el7_1.x86_64                                                                    2/2
  验证中      : 1:tcl-8.5.13-8.el7.x86_64                                                                      1/2
  验证中      : expect-5.45-14.el7_1.x86_64                                                                    2/2
 
已安装:
  expect.x86_64 0:5.45-14.el7_1                                                                                   
 
作为依赖被安装:
  tcl.x86_64 1:8.5.13-8.el7                                                                                       
 
完毕!

  通过上面安装信息知道,安装expect 还有个tcl的依赖,总共装了两个包。

 

0x01:获取expect文件安装的路径

1
2
[root@node1 ~]# whereis expect
expect: /usr/bin/expect /usr/share/man/man1/expect.1.gz
1
/usr/bin/expect  #这个就是expect可执行文件的路径,这个文件我们保留要用到
1
/usr/share/man/man1/expect.1.gz  #expect帮助文件

0x02:查看expect是否需要so动态库文件(相当于windows下dll文件)

1
2
3
4
5
6
7
8
9
10
[root@node2 ~]# ldd /usr/bin/expect
        linux-vdso.so.1 =>  (0x00007fff35707000)
        libexpect5.45.so => /lib64/libexpect5.45.so (0x00007ffb1017f000)
        libtcl8.5.so => /lib64/libtcl8.5.so (0x00007ffb0fe57000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007ffb0fc53000)
        libm.so.6 => /lib64/libm.so.6 (0x00007ffb0f951000)
        libc.so.6 => /lib64/libc.so.6 (0x00007ffb0f583000)
        libutil.so.1 => /lib64/libutil.so.1 (0x00007ffb0f380000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ffb0f164000)
        /lib64/ld-linux-x86-64.so.2 (0x00007ffb103b3000)

  注意 “=>” 后面带路径/lib64/的so文件,是expect运行需要的,要全部复制。

 

0x03:新建存放expect文件和so文件的目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@node2 ~]# mkdir expect   # 新建存放expect文件和so的目录
[root@node2 ~]# cd expect
[root@node2 expect]# pwd
/root/expect
[root@node2 expect]# ll  # 把上面找到的so文件都放进来
总用量 4824
-rw-r--r--. 1 root root   11352 6月  24 2015 expect
-rw-r--r--. 1 root root 2156240 4月   1 2020 libc.so.6
-rw-r--r--. 1 root root   19248 4月   1 2020 libdl.so.2
-rw-r--r--. 1 root root  200848 6月  24 2015 libexpect5.45.so
-rw-r--r--. 1 root root 1136944 4月   1 2020 libm.so.6
-rw-r--r--. 1 root root  142144 4月   1 2020 libpthread.so.0
-rw-r--r--. 1 root root 1242080 11月 20 2015 libtcl8.5.so
-rw-r--r--. 1 root root   14424 4月   1 2020 libutil.so.1

0x04:运行提示权限不足

1
2
[root@node2 expect]# ./expect
-bash: ./expect: 权限不够

 

0x05:赋权

1
2
3
4
5
6
7
8
9
10
11
[root@node2 expect]# chmod 755 expect
[root@node2 expect]# ll
总用量 4824
-rwxr-xr-x. 1 root root   11352 6月  24 2015 expect
-rw-r--r--. 1 root root 2156240 4月   1 2020 libc.so.6
-rw-r--r--. 1 root root   19248 4月   1 2020 libdl.so.2
-rw-r--r--. 1 root root  200848 6月  24 2015 libexpect5.45.so
-rw-r--r--. 1 root root 1136944 4月   1 2020 libm.so.6
-rw-r--r--. 1 root root  142144 4月   1 2020 libpthread.so.0
-rw-r--r--. 1 root root 1242080 11月 20 2015 libtcl8.5.so
-rw-r--r--. 1 root root   14424 4月   1 2020 libutil.so.1

 

0x06:加载当前路径下的so文件,而不是先去搜索系统路径的(这个正好是和Windows相反)

1
[root@node2 expect]# export LD_LIBRARY_PATH=./

  注意:退出后即失效。永久生效查看另外一篇文章 -->   Ubuntu linux设置从当前目录下加载动态库so文件

 

0x07:执行提示缺少tcl文件

1
2
3
4
5
[root@node2 expect]# ./expect
Tcl_Init failed: Can't find a usable init.tcl in the following directories:
    /usr/share/tcl8.5 /root/lib/tcl8.5 /lib/tcl8.5 /root/library /library /tcl8.5.13/library /tcl8.5.13/library
 
This probably means that Tcl wasn't installed properly.

  按照提示,tcl所在的目录是/usr/share/tcl8.5 /root/lib/tcl8.5 /lib/tcl8.5 /root/library /library /tcl8.5.13/library /tcl8.5.13/library其中一个,越靠左的优先级最高,先找/usr/share/tcl8.5

 

0x08:查看tcl目录内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@node1 ~]# ll -d /usr/share/tcl8.5
drwxr-xr-x. 6 root root 249 9月   2 22:17 /usr/share/tcl8.5
[root@node1 ~]# ll /usr/share/tcl8.5/
总用量 308
-rw-r--r--. 1 root root  20510 11月 20 2015 auto.tcl
-rw-r--r--. 1 root root 130269 11月 20 2015 clock.tcl
drwxr-xr-x. 2 root root   4096 9月   2 22:17 encoding
-rw-r--r--. 1 root root   8965 11月 20 2015 history.tcl
drwxr-xr-x. 2 root root     42 9月   2 22:17 http1.0
-rw-r--r--. 1 root root  24848 11月 20 2015 init.tcl
drwxr-xr-x. 2 root root   4096 9月   2 22:17 msgs
drwxr-xr-x. 2 root root     46 9月   2 22:17 opt0.4
-rw-r--r--. 1 root root  23588 11月 20 2015 package.tcl
-rw-r--r--. 1 root root    803 11月 20 2015 parray.tcl
-rw-r--r--. 1 root root  33170 11月 20 2015 safe.tcl
-rw-r--r--. 1 root root   6693 11月 20 2015 tclDTrace.d
-rw-r--r--. 1 root root   6379 11月 20 2015 tclIndex
-rw-r--r--. 1 root root  11432 11月 20 2015 tm.tcl
-rw-r--r--. 1 root root   4659 11月 20 2015 word.tcl

0x09:里面有很多文件,所以直接打包tcl8.5这个文件夹

1
2
[root@node1 ~]#  cd /usr/share/
[root@node1 share]# tar -cf tcl.tar tcl8.5/

  

0x0A:解压位置,上面运行expect时提示搜索的那几个路径,都可以放,这里放到/root/lib/tcl8.5/

1
2
[root@node1 ~]#  mkdir lib
[root@node1 ~]#  tar -xf tcl.tar lib/

0x0B:因为expect只搜索这几个路径,如果lib文件夹想放到其他位置,用ln -s做个软连接即可

1
2
3
[root@node2 expect]# ln -s /root/expect/lib ~/lib
[root@node2 expect]# ll ~
lrwxrwxrwx. 1 root root   16 9月   2 22:29 lib -> /root/expect/lib

0x0C:再次运行expect,查看其版本

1
2
3
4
5
[root@node2 expect]# pwd
/root/expect
 
[root@node2 expect]# ./expect -version
expect version 5.45

  好了,成功运行。

  

 

参考:

Ubuntu linux设置从当前目录下加载动态库so文件

ldd命令

https://blog.csdn.net/daixiangzi/article/details/84346523/

搜索linux加载当前目录so文件

 

posted @   悟透  阅读(484)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示