linux中缺少某些命令该怎么办呢?------以tree命令为例

版权声明:本文为博主原创文章,转载时请务必注明本文地址, 禁止用于任何商业用途, 否则会用法律维权。 https://blog.csdn.net/stpeace/article/details/49524273

        老伴喜欢玩扫雷游戏, 某次, 她发现自己的电脑里面没有扫雷程序, 就觉得系统有问题, 懂一点软件的我告诉她, 拷贝一个winmine.exe就行, 果然奏效。

        

        在本文中, 我们来聊聊这样一个常见的问题: 在linux中输入某命令后, 系统提示没有这个命令, 比如:bash: tree: command not found. 系统提示我们, 没有tree这个命令, 那该怎么办呢?

        首先我们必须明白linux命令的本质, 大家都知道, 在linux中, 一切都是文件, 所以命令也是文件。 在这里, 我们可以理解为执行tree命令就是执行tree文件(通常是可执行文件、脚本等), 然后我们想办法把tree文件拷贝到系统默认目录中(需要root权限)。最后, 万事大吉, tree命令可以用了。

       那问题是, 我们去哪里拷贝呢? 有两个方法:

       a. 从别的机器上拷贝;

       b. 编译tree对应的源代码, 生成对应的tree文件, 然后拷贝到对应的系统目录。


       在本文中, 我只介绍第二种方法,步骤如下:

       1. 在网上下载tree命令对应的源文件, 然后tar解压。

       2. 执行make命令进行编译, 生成tree文件(可执行文件)

       3. 把tree文件拷贝到/bin中

        具体如下:

[root@localhost test]# ls
a.txt  b.txt  tree-1.7.0.tgz
[root@localhost test]# tar zxvf tree-1.7.0.tgz 
tree-1.7.0/CHANGES
tree-1.7.0/INSTALL
tree-1.7.0/LICENSE
tree-1.7.0/Makefile
tree-1.7.0/README
tree-1.7.0/TODO
tree-1.7.0/color.c
tree-1.7.0/hash.c
tree-1.7.0/html.c
tree-1.7.0/json.c
tree-1.7.0/strverscmp.c
tree-1.7.0/tree.c
tree-1.7.0/tree.h
tree-1.7.0/unix.c
tree-1.7.0/xml.c
tree-1.7.0/doc/tree.1
tree-1.7.0/doc/tree.1.fr
tree-1.7.0/doc/xml.dtd
[root@localhost test]# cd tree-1.7.0
[root@localhost tree-1.7.0]# make
gcc -ggdb -Wall -DLINUX -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -c -o tree.o tree.c
gcc -ggdb -Wall -DLINUX -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -c -o unix.o unix.c
gcc -ggdb -Wall -DLINUX -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -c -o html.o html.c
gcc -ggdb -Wall -DLINUX -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -c -o xml.o xml.c
gcc -ggdb -Wall -DLINUX -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -c -o json.o json.c
gcc -ggdb -Wall -DLINUX -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -c -o hash.o hash.c
gcc -ggdb -Wall -DLINUX -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -c -o color.o color.c
gcc  -o tree tree.o unix.o html.o xml.o json.o hash.o color.o
[root@localhost tree-1.7.0]# cp tree /bin
[root@localhost tree-1.7.0]# tree ../ -L 1
../
├── a.txt
├── b.txt
├── tree-1.7.0
└── tree-1.7.0.tgz

1 directory, 3 files
[root@localhost tree-1.7.0]# tree ../ -L 2
../
├── a.txt
├── b.txt
├── tree-1.7.0
│   ├── CHANGES
│   ├── color.c
│   ├── color.o
│   ├── doc
│   ├── hash.c
│   ├── hash.o
│   ├── html.c
│   ├── html.o
│   ├── INSTALL
│   ├── json.c
│   ├── json.o
│   ├── LICENSE
│   ├── Makefile
│   ├── README
│   ├── strverscmp.c
│   ├── TODO
│   ├── tree
│   ├── tree.c
│   ├── tree.h
│   ├── tree.o
│   ├── unix.c
│   ├── unix.o
│   ├── xml.c
│   └── xml.o
└── tree-1.7.0.tgz

2 directories, 26 files
[root@localhost tree-1.7.0]# 

        OK, 一颗漂亮的tree就这样出来了, 如上是在root用户下的操作, 主要是因为往/bin中复制东西需要root权限。 复制之后, 普通用户也可以执行tree命令了。 


       本文虽然简单, 但至少可以让我们深入理解linux命令究竟是怎么回事。当然, 如果大家对tree的源代码有兴趣, 也不妨研究一下。 这也可以看做广义上的linux源码(扩展的源码)。


        我会把tree的源码放在自己的博客资源中供大家免费免积分下载, 有兴趣的朋友可以试试。 赶快去看看吧。






猜你喜欢

转载自blog.csdn.net/stpeace/article/details/49524273