老伴喜欢玩扫雷游戏, 某次, 她发现自己的电脑里面没有扫雷程序, 就觉得系统有问题, 懂一点软件的我告诉她, 拷贝一个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的源码放在自己的博客资源中供大家免费免积分下载, 有兴趣的朋友可以试试。 赶快去看看吧。