初入江湖,在下菜鸟,还请大佬指点。这里浅谈自己对一些linux常见概念的入门级感悟。
----------------------------------------------------------------- 感 谢 大 佬 赏 脸 ------------------------------------------------------------------------
我的理解是,Linux严格意义上指的是linux 内核(kernel),即由瑞典大神Linus Torvalds大神一手写就。
Linux作为一个操作系统而言,可以粗略看作是GUN related 部件(比如文件管理等围绕内核搭建的功能性部件) + Linux内核。因此,Linux OS应该叫做GUN linux OS。
Linux由于开源,所以门派众多,形成丰富的生态、hierarchy。
-
Forks:
在Hierarchy的最顶端,是几大(此处只提及最主流的两大)forks:Debian,Red Hat。
-
Distributions:
Distributions是forks之下更为细致的GNU Linux OS版本,
Debian 体系下有 Ubuntu、Mint、BackTrack、Kali,etc
Red Hat体系下有CentOS、Fedora、OpenSUSE、MannDrake,etc
这些distributions,就是我们平日可以选用的具体GNU Linux OS的版本了。
不同distribution会有些指令上的差别,比如,在Debian体系中安装软件用sudo apt-get,而red hat体系中用yum。(Mac OS的brew是完全不同操作系统上的事,非亲非故。另外,pip和conda install是专门安装存放在Pypi和anaconda repo里的Python related软件,而apt-get是面向全语言的安装,即pip install是更为具象、仅面向python的安装)。
-
Shell(Bourne Again Shell = bash)
linux OS的内核,即T大神写就的inux kernel,我们可以通过shell来与其交互,完成我们想操作的任务。
Shell本身自己是一个C写成的程序,作为用户与Linux内核交互的桥梁。
而bash,是众多shell版本中的一个,即Bourne Again Shell。其他shell还有C shell、K shell等等。
当我们打开一个terminal(指领行界面),就会自动invoke一个shell,我们可以在shell中,运行各种指令。
-
指令、PATH、(.bashrc .bash_profile文件)
我们打进到指令行(shell)的各种指令(ls、cd、pwd、mkdir、echo、df、ifconfig、pip、conda、etc)其实都对应着一个在系统中某处存储着的binary exxecutable(二进制可执行文件)。
举例,当在shell中打入python时,(可能)/usr/bin/python这个二进制文件(即系统默认python interprator)就会被唤醒。
当在shell中打入某指令时,shell会在系统路径PATH(查看自己系统的PATH可以用echo $PATH)中查看这个指令对应的二进制文件存放在那个directory里。若系统PATH中记录有多个python版本,那么在PATH中最前面出现的那个python directory里的python interprator版本会被默认为shell启用的python。
对PATH(其实就是一个系统中存放可执行文件所在文件夹的list)的管理,即当安装了新软件之后希望它可以被shell找到(不会出现command not found的窘境),则需要通过.bashrc or .bash_profile文件来access和modify PATH(具体指令是EXPORT)。值得注意的是,.bashrc前面的. 代表这个文件是隐藏文件,需要用ls -a才看得到。
这两个bash文件其实就是写满了shell script的text文件,会被shell逐条执行其中的内容。
.bashrc文件是non-lgoin & interactive的,即在登陆系统是不会自动执行,而是需要用source ~/.bashrc手动执行; .bash_profile是login_shell,每次登陆系统时会自动执行一次(可以理解为配置好你的shell以便你此次登陆后使用)。在这两个文件中约靠近文件底部的export指令中的path会出现在PATH的前面,因此,写在底部的指令的优先级更高。(自动安装的一些软件,比如anaconda,就会自动把自己写入bashrc最靠底部的地方,以便自己出现在$PATH的前端)。