此篇博客做了大量验证性实验,并不是很成一个体系,只做一些随笔记录,并没有哪方面的专题。
常用命令语句可以参见如下:
1.虚拟机重新安装了Ubuntu20.04.3,安装完毕后,可以看到一些文件夹的起初状态,/usr/local文件夹里内容都为空。这个文件夹用来存放本地安装的程序,一些根库文件
其它的一些文件夹介绍见如下链接
Ubuntu根目录下各文件夹的功能详细介绍 - Yudar - 博客园
/etc/init.d是个什么文件夹_q469587851的博客-CSDN博客_init.d是什么
2.发现该桌面版本预装了python,但没有g++或者gcc编译器
3.常用的shell命令语句可参考如下链接
ubuntu及shell脚本常用命令入门_......、的博客-CSDN博客
linux/ubuntu常用bash/shell命令_忧郁一休-CSDN博客
4.这边联想到了windows下的lib和dll的区别
LIB和DLL的区别与使用 - 苦逼码农2014 - 博客园
以opencv编译出来的动态链接库为例,
可以看到这里的lib是上面提到的这种(包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library )
这也就是我们平时调用Opencv时,如果没有先配置好opencv的bin目录环境变量,又没有在执行文件exe的对应目录下放入对应lib的dll文件时,会报错。编译是没有问题的,因为lib里面本身就预定义了这些函数接口。编译到执行的一个大概过程可以参见如下博客 C/C++源代码到可执行程序的过程详解 - SilenceBook - 博客园
解决此问题方法之一就是把dll文件拷贝到exe的目录下。还有一个方法就是把bin文件添加到环境变量里去,让其能够找到。
同时博主也做了实验,就是环境变量里有两个路径下都有共同的名为opencv_world454d.dll,其中一个文件夹下的dll只是故意将别的dll名改为其,看其能否自动找到正确的dll,正确执行程序。验证下来,这个和环境变量里路径的添加顺序有关系。如下第一个路径下存放的是假的名为opencv_world454d.dll ,程序则不能正确执行,调换下顺序后,程序则能正确执行。
顺序:
程序优先考虑exe所在目录下是否有对应的dll,如果没有找到对应的dll,则会在环境变量路径下找,且只考虑索引到的一个出现此名的dll, 不会接着往下找。
5.同理,ubuntu下也有环境变量,下面说明下
/etc/profile:在登录时,操作系统定制用户环境时使用的第一个文件,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。并从/etc/profile.d目录的配置文件中搜集shell的设置。这个文件一般就是调用/etc/bash.bashrc文件。
/etc/bash.bashrc:系统级的bashrc文件,为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承 /etc/profile中的变量,他们是"父子"关系。
/etc/environment: 在登录时操作系统使用的第二个文件,系统在读取你自己的profile前,设置环境文件的环境变量。
~/.profile: 在登录时用到的第三个文件 是.profile文件,每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。
~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。不推荐放到这儿,因为每开一个shell,这个文件会读取一次,效率 上讲不好。
~/.bash_profile:每个用户都可使用该文件输入专用于自己 使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。~/.bash_profile 是交互式、login 方式进入 bash 运行的~/.bashrc是交互式 non-login 方式进入 bash 运行的通常二者设置大致相同,所以通常前者会调用后者。
~./bash_login:不推荐使用这个,这些不会影响图形界面。而且.bash_profile优先级比bash_login高。当它们存在时,登录shell启动时会读取它们
~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件.
~/.pam_environment:用户级的环境变量设置文件。
可参考如下博客:
Ubuntu环境变量——添加与删除 - bohaoist - 博客园
详解/etc/profile、/etc/bash.bahsrc、~/.profile、~/.bashrc的用途_jirryzhang的博客-CSDN博客
Ubuntu环境变量配置_小白成长记-CSDN博客_ubuntu 环境变量
Ubuntu 环境变量的设置_cc的专栏-CSDN博客_ubuntu环境变量
export命令
env命令
echo $PATH
【命令】Ubuntu设置和查看环境变量_盐与黑胡椒的博客-CSDN博客
Ubuntu系统中使用echo向文件写入内容 - 夏洛蒂 - 博客园
接下来了解下软硬连接
https://jingyan.baidu.com/article/cbf0e5004e2dfd2eaa289393.html
ubuntu软连接建立与删除使用总结_CCS_330的博客-CSDN博客
Ubuntu 链接ln的使用:创建和删除符号链接 - 553490191 - 博客园
Ubuntu软连接命令_开发笔记-CSDN博客_ubuntu软连接命令
ubuntu下的软链接和硬链接_三哥的专栏-CSDN博客_ubuntu 软连接
经常还会碰到ldconfig命令语句,关于该命令的一些博客介绍如下
Linux ldconfig命令 - 红孩儿你好 - 博客园
ldconfig 命令_陈嘉怡的专栏-CSDN博客_ldconfig命令
6.ubuntu常见的安装软件的方法有三种:
(1)apt-get方式
ubuntu软件包安装卸载方法_zhw864680355的博客-CSDN博客
apt-get install xxx 安装xxx 。如果带有参数,那么-d 表示仅下载 ,-f 表示强制安装
apt-get remove xxx 卸载xxx
apt-get update 更新软件信息数据库
apt-get upgrade 进行系统升级
apt-cache search 搜索软件包
查看安装到哪里了可以参看
ubuntu查找apt-get安装的库的位置并添加到cmakelist中_weixin_36049506的博客-CSDN博客
用apt-get安装的软件都安装到哪儿去了 - Ubuntu中文论坛
(2)dpkg方式
(3)源码包下,编译完毕后make install
这是编译源代码的第一步,通过 ./configure 命令完成。执行此步以便为编译源代码作准备。常用的选项有 –prefix=PREFIX,用以指定程序的安装位置,然后sudo make, sudo make install
(4)aptitude方式
【Ubuntu】aptitude命令详解_widiot的博客-CSDN博客_aptitude
【Linux】ubuntu使用aptitude命令替换apt-get_love131452098的博客-CSDN博客
7.Ubuntu卸载软件的方法:
Ubuntu命令卸载软件_象牙塔下的渣渣-CSDN博客_ubuntu卸载软件命令
Ubuntu卸载软件:3种卸载方式_初识-CV的博客-CSDN博客_ubuntu 卸载软件
linux apt-get autoremove千万别乱用_笑看人生的博客-CSDN博客
ubuntu 卸载从源码安装的 emacs - Fienly - 博客园
apt - How to completely remove my Emacs? - Ask Ubuntu
8.更新源
cd /etc/apt下
然后可以备份下当前源
sudo cp sources.list sources.list.backup
然后修改其,参见我之前的博客
VMware Ubuntu20.04下挂载磁盘、更新源等常用配置_jiugeshao的专栏-CSDN博客
9.多版本下如何切换当前版本
博主当前系统已经默认安装了python3.8.10. /usr/bin下只有python3,并无python
博主想通过apt-get方式安装3.6,但出现如下信息:
Reading package lists... Done
Building dependency tree
Reading state information... Done
Note, selecting 'python3.6-2to3' for regex 'python3.6'
Note, selecting 'libpython3.6-stdlib' for regex 'python3.6'
0 upgraded, 0 newly installed, 0 to remove and 83 not upgraded.
是由于博主的默认源里并无这个库,非要安装这个库,可以更新源(仓库)或者从源码安装 ,博主这里apt-get python3.5吧
可以看到/usr/bin下多了一个python3.5(新的python版本)
使用如下命令看到python默认版本是python3.8
下面再通过源码方式手动安装python3.6
Index of /ftp/python/3.6.2/ 上下载Python-3.6.2.tgz, 并解压缩到home路径下(博主的路径)
命令行语句下执行
./configure
会出现报错信息
configure: error: in `/home/sxhlvye/Python-3.6.2':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details
同时执行如下查找命令,发现g++和gcc还未安装
可以通过如下命令安装一些基本的库
sudo apt-get install build-essential
如下也显示了即将要安装的库的内容,可以看到里面有g++和gcc
再回到前面源码安装python3.6
再次输入./configure开始正常进行安装,完毕后再执行sudo make,最后执行sudo make install
make install时,出现如下报错:
zipimport.ZipImportError: can't decompress data; zlib not available
make: *** [Makefile:1067: install] Error 1
可以按照报错提示,安装下zlib库
这里又注意到了带-dev后缀的包,相关介绍可参见博客
ubuntu -dev -dbg 的软件包详解_sxpcccc的博客-CSDN博客
完毕后,重新在make install,成功。
在/usr/bin下并没有看到python3.6
可看到python3.6安装到了/usr/local/bin目录下了
参考博客:ubuntu安装python3.7,并更新python默认指向为python3.7_u014775723的博客-CSDN博客_ubuntu安装python3.7
此时电脑里python3已经存在了3.5, 3.6和3.8三个版本,如下可以指定python3命令时,指向的是python3.6版本
可看到已经切换为了3.6.2版本
同时查看pip3库的路径,只有一个目录下有,且pip3绑定的就是pip3.6,所以也不需要更改了
ubuntu16.04多版本Python任意切换(亲测有效)_zbr794866300的博客-CSDN博客
Ubuntu16.04多个版本GCC编译器的安装和切换 - 小淼博客 - 博客园
Ubuntu安装切换多个软件版本_honyniu的专栏-CSDN博客
补充:
1.接下来会卸载掉3.5的python环境,用到上面的库卸载语句,因为python3.5当时是通过apt-get方式安装的,所以这里在终端上输入命令sudo apt-get --purge remove python3.5来删除(--purge是可选项,写上这个属性是将软件及其配置文件一并删除,如不需要删除配置文件,可执行sudo apt-get remove python3.5)
实际先使用了sudo apt-get remove python3.5命令,执行完毕后,发现python3.5版本还在
再使用purge方式,发现python3.5还在
只能手动一个个删除依赖库,不能使用autoremove
博主后来使用上文提到的aptitude安装和卸载是可以的,尝试删除上面的python3.5,发现其包和配置包都被卸载掉了。也发现源码安装的包有的时候并不提供uninstall命令,所以还是指定一个安装目录吧,所有文件都安装到一个指定目录下,删除也好删除。以后尽量按照这个来,减少不必要的麻烦。
linux下python3源码安装及卸载 - wuli潇潇 - 博客园
2.删掉上面提到的软链接中的目标文件/usr/local/bin/python3后,发现
/usr/bin下的python3显示出一个失效符号, 可以删除原来的软链接,重新再建立下软链接即可。