谢谢比特科技提供。
环境变量:
Linux是一个多用户的操作系统。多用户意味着每个用户登录系统后,都有自己专用的运行环境。而这个环境是由一组变量所定义,这组变量被称为环境变量。用户可以对自己的环境变量进行修改以达到对环境的要求。
环境变量是和Shell紧密相关的,它是通过Shell命令来设置的。
环境变量又可以被所有当前用户所运行的程序所使用对于bash来说,可以通过变量名来访问相应的环境变量。
Linux中常见的环境变量有:
1.PATH:指定命令的搜索路径
2.HOME:指定用户的主工作目录(用户登陆到Linux系统中时,默认的目录)
3.HISTSIZE:指保存历史命令记录的条数。
4.LOGNAME:指当前用户的登录名。
5.HOSTNAME:指主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的。
6.SHELL:指当前用户用的是哪种Shell。
7.LANG/LANGUGE:和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。
8.MAIL:指当前用户的邮件存放目录。
9.PS1:命令基本提示符,对于root用户是#,对于普通用户是$。
10.PS2:附属提示符,默认是“>”。
注意:上述变量的名字并不固定,如HOSTNAME在某些Linux系统中可能设置成HOST
Linux也提供了修改和查看环境变量的命令!下面通过几个实例来
说明:
1.echo 显示某个环境变量值 echo $PATH
2.export 设置一个新的环境变量 export
HELLO="hello" (可以无引号)
3.env 显示所有环境变量
4.set 显示本地定义的shell变量
5.unset 清除环境变量 unset HELLO
6.readonly 设置只读环境变量 readonly HELLO
Linux环境变量名,Linux 共享库环境变量,该环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径。(该路径在默认路径之前查找)
移植程序时的经常碰到需要使用一些特定的动态库,而这些编译好
的动态库放在我们己立目录里,这时可以将目录设置到LD_LIBRARY_PATH中。
Linux文件类型:
普通文件(regular file)第一个字符为[ - ]包括:
①纯文本档(ASCII):这是Linux系统中最多的一种文件类型,称为纯文本档。是因为内容为我们人类可以直接读到的数据,例如数字、字母等等。
②二进制文件(binary):你的Linux中的可执行文件(scripts, 文字型批处理文件不算)就是这种格式的。
③数据格式文件(data):有些程序在运作的过程当中会读取某些特定格式的档案,那些特定格式的档案可以被称为数据文件 (datafile)。一般用cat看到的都是乱码。
2.目录(directory): 第一个字符为[ d ]
3.连接文件(link)第一个字符为[ l ]
4.设备和设备文件块设备文件,即一些存储文件,如硬盘、软盘等,第一个字符为[ b ]字符设备文件,即一些串行端口的接口文件,如键盘、鼠标等,第一个字符为[ c ]
5.套接字(sockets)第一个字符为[ s ]还被称为数据接口文件,这种类型的文件通常被用在网络上的数据连接。我们可以启动一个程序来监听客户端的请求,而客户端就可以通过数据接口文件来进行数据通信。
6.管道(FIFO,pipe)第一个字符为[ p ]FIFO也是一种特殊的文件类型,他主要的目的解决多个程序同时访问一个文件所造成的错误问题,first-in-first-out。linux的扩展名
基本上,Linux的文件是没有所谓的『扩展名』的,我们刚刚就谈过,一个Linux文件能不能被执行,与x有关,与文件名根本一点关系也没有。这个观念跟Windows 的情况不相同!在Windows 底下,能被执行的档案扩展名通常是 .com .exe .bat 等,而在Linux底下,只要你的权限当中具有 x的话,例如[ -rwx-r-xr-x ]即代表这个文件可以被执行!但是能执行与能执行成功是不同的。虽然扩展名不起作用但是我们还是希望可以由扩展名了解此文件是什么东西。所以。。。
.sh : 脚本或者批处理文件(scripts)
.Z .tar .tar.gz .zip .tgz : 经过打包的压缩文件。
.html .php :网页相关文件。
Linux 一切皆文件的思想。
介绍Linux目录结构。
超级用户和普通用户。
一.Linux shell指令运行的原理:Linux严格意义上说的是一个操作系统,我们称之为"核心
(kernel)",但我们一般用户不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。
如何理解?
为什么不能直接使用kernel?
从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)
主要包含:
a. 将使用者的命令翻译给核心(kernel)处理。
b. 同时,将核心的处理结果翻译给使用者。
对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。
shell的普遍作用
UNIX的shell程序解释用户的命令,Shell脚本是解释型的,而不是编译型的。除了向内核传送命令之外,shell的主要任务是提供一个可单独配置的使用shell资源配置文件的用户环境。
shell任务的一个重要部分是搜索命令。Bash是按照下面的步骤来完成的:检查命令是否包含斜杠。如果没有,首先检查函数列表是否包含一个我们寻找的命令。如果命令不是一个函数,那么在内建命令列表中检查。
shell内建命令是指bash(或其它版本)工具集中的命令。
一般都会有一个与之同名的系统命令,比如bash中的echo命令与/bin/echo是两个不同的命令,尽管他们行为大体相仿。当在bash中键入一个命令时系统会先看他是否是一个内建命令,如果不是才会查看是否是系统命令或第三方工具。所以在bash中键入echo命令实际上执行bash工具集中的bash命令也就是内建命令,而不是/bin/echo这个系统命令。
如果命令既不是函数也不是内建命令,那么扫描列在 PATH 中的目录列表来进行查找。Bash使用一个 hashtable (内存中的数据存放区域) 来记忆可执行文件的完整路径,这样能防止对 PATH 的扩展搜索。
如果搜索没有成功,Bash一条错误消息并返回退出状态如果搜索成功或者命令一个斜杠,shell一个单独行中行这个命令。
如果因为文件是不可执行的或者不是一个目录造成执行失败,就假设是一个shell脚本。如果命令是异步开始的,shell会等待命令完成并收集它的退出状态。
shell如何运行程序
shell用fork建立新进程,用execv函数簇在新进程中运行用户指定的程序,最后shell用wait命令等待新进程结束。wait系统调用同时从内核取得退出状态或者信号序号以告知子进程是如何结束的。
待续——。
转载于:https://blog.51cto.com/memory73/1742565