理解Linux程序路径可以更加方便我们读懂linux文件系统。
一个完整的Linux程序一般包括bin、lib、share等子目录,bin目录下为可执行的二进制文件;lib目录下为程序的动态链接库文件;share目录下为一些文档说明、帮助文件等。
一、系统程序路径
Linux系统有些开机启动程序和一些终端命令,它们都是可执行的二进制文件,一般在系统安装过程中予以安装,其存放的路径就在/bin
和/sbin
目录下。
/bin #存放着二进制可执行文件,如ls,cat等系统命令就都放在此目录中
/sbin #存放着只有root用户才能访问的二进制可执行文件,如ifconfig等命令
二、通过包管理器安装的程序路径
通过包管理器安装的程序一般在/usr
目录下
以apache2(httpd)为例:
ubuntu系统终端输入whereis apache2
可以得到如下信息(已排版)
apache2:
/usr/sbin/apache2 #二进制程序,也可理解为windows下的exe文件
/usr/lib/apache2 #动态链接库文件
/etc/apache2 #配置文件
/usr/share/apache2 #说明文档
/usr/share/man/man8/apache2.8.gz #man帮助文件
RHEL8系统终端输入whereis httpd
也可以得到类似结构的信息
[root@hollowman ~]# whereis httpd
httpd: /usr/sbin/httpd /usr/lib64/httpd /etc/httpd /usr/share/httpd /usr/share/man/man8/httpd.8.gz
三、用户手动编译安装的程序路径
用户手动编译安装源码文件时可以指定安装路径(注意需要先安装好依赖包),如下面的例子,将pcre-8.35安装到了/usr/local/pcre
目录
#安装依赖包(源码安装必备的依赖包)
[root@hollowman ~]# yum install make gcc-c++
#下载软件包(一般我们将软件包都下载到 /usr/local/src/目录下)
[root@hollowman ~]# cd /usr/local/src/
[root@hollowman src]# wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
[root@hollowman src]# tar zvxf pcre-8.35.tar.gz
[root@hollowman src]# ls
pcre-8.35 pcre-8.35.tar.gz
[root@hollowman src]# cd pcre-8.35/
#手动编译安装到指定目录/usr/local/pcre
[root@hollowman pcre-8.35]# ./configure --prefix=/usr/local/pcre
[root@hollowman pcre-8.35]# make
[root@hollowman pcre-8.35]# make install
#查看程序路径
[root@hollowman local]# cd pcre
[root@hollowman pcre]# ls
bin include lib share
[root@hollowman pcre]# tree
.
├── bin
│ ├── pcre-config
│ ├── pcregrep
│ └── pcretest
├── include
│ ├── pcrecpparg.h
│ ├── pcrecpp.h
│ ├── pcre.h
│ ├── pcreposix.h
│ ├── pcre_scanner.h
│ └── pcre_stringpiece.h
├── lib
│ ├── libpcre.a
│ ├── libpcrecpp.a
│ ├── .........
│ ├── libpcre.so.1 -> libpcre.so.1.2.3
│ ├── libpcre.so.1.2.3
│ └── pkgconfig
│ ├── libpcrecpp.pc
│ ├── libpcre.pc
│ └── libpcreposix.pc
└── share
├── doc
│ └── pcre
│ ├── AUTHORS
│ ├── ChangeLog
│ ├── COPYING
│ ├── html
│ │ ├── index.html
│ │ ├── NON-AUTOTOOLS-BUILD.txt
│ │ ├── pcre16.html
│ │ ├── pcre32.html
│ │ ├── ........
│ └── README
└── man
├── man1
│ ├── pcre-config.1
│ ├── pcregrep.1
│ └── pcretest.1
└── man3
├── pcre16.3
├── pcre16_assign_jit_stack.3 -> pcre_assign_jit_stack.3
├── .........
11 directories, 194 files
如果不指定安装路径,系统会将其默认安装到/usr/local
目录下,同样以pcre-8.35
为例
#安装依赖包 略
#下载软件包 略
#手动编译安装,不指定安装目录
[root@hollowman pcre-8.35]# ./configure
[root@hollowman pcre-8.35]# make
[root@hollowman pcre-8.35]# make install
[root@hollowman include]# cd /usr/local
[root@hollowman local]# ls
bin etc games include lib lib64 libexec sbin share src
[root@hollowman local]# tree bin
bin
├── pcre-config
├── pcregrep
└── pcretest
[root@hollowman local]# tree include/
include/
├── pcrecpparg.h
├── pcrecpp.h
├── pcre.h
├── pcreposix.h
├── pcre_scanner.h
└── pcre_stringpiece.h
不难发现,/usr/local/
下的bin
目录和include
目录下的文件均为刚刚安装的。
如果所有的程序均不指定安装路径,则程序的可读性将大大降低,如bin目录下将保存多个程序的二进制执行文件,当然也有好处,不用设置环境变量,因为系统已经默认将/usr/local/bin
添加到环境变量了,也就是可以直接执行pcre的有关命令,如:
[root@hollowman local]# pcre-config --version
8.35
四、源码一般放哪里
1.系统级的源码路径一般放在/usr/src
目录下。
[root@hollowman local]# ls /usr/src
debug kernels
2.用户级的源码路径一般放在/usr/local/src
目录下,这也就是上面为什么下载目录要切换到/usr/local/src
的原因。