一、Linux系统结构
1.Linux内核是什么?
操作系统是一个用来和硬件打交道并为用户程序提供一个有限服务集的低级支撑软件。一个计算机系统是一个硬件和软件的共生体,它们互相依赖,不可分割。计算机的硬件,含有外围设备、处理器、内存、硬盘和其他的电子设备组成计算机的发动机。但是没有软件来操作和控制它,自身是不能工作的。完成这个控制工作的软件就称为操作系统,在Linux的术语中被称为“内核”
,也可以称为“核心”
。Linux内核的主要模块(或组件)分以下几个部分:存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的初始化(引导)、系统调用等。
2.shell是什么
Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。是在Linux内核与用户之间的解释器程序,现在Linux通常指/bin/bash解释器来负责向内核翻译以及传达用户/程序指令,shell相当于操作系统的“外壳”
接收用户的命令,经过转换,交给内核去执行
为什么使用shell 为了简化操作和保证内核的安全。
代码语言:javascript复制#查看当前shell
echo $SHELL
#切换shell
chsh -s /bin/csh
#查看shell列表
chsh -l
shell名称 | 程序路径 |
---|---|
bonrne shell | /usr/bin/sh或/bin/sh |
C Shell | /usrbin/csh |
K Shell | usr/bin/ksh |
Bourne Again Shell | /bin/bash |
Z Shell | /bin/zsh或/usr/bin/zsh |
Windows:cmd、Power Shell
3.Linux文件系统
Linux系统一切皆文件
普通文件、目录、进程(/proc)、输入输出设备(/dev)、网络字节流socket、链接文件、管道文件
Linux系统没有Windows盘符的概念,所有的文件都在根目录/
下
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
目录 | 说明 | 备注 |
---|---|---|
bin | 存放普通用户可执行的指令(存放二进制可执行文件) | 即使在单用户模式下也能够执行处理 |
boot | 开机引导目录存放用于系统引导时的文件 | 包括Linux内核文件与开机所需要的文件 |
dev | 设备目录用于存放设备文件 | 所有的硬件设备及周边均放置在这个设备目录中 |
etc | 各种配置文件目录 | 大部分配置属性均存放在这里 |
lib/lib64 | 存放跟文件系统中的程序运行所需要的共享库及内核模块开机时常用的动态链接库 | bin及sbin指令也会调用对应的lib库 |
media | 可移除设备挂载目录 | 类似软盘 U盘 光盘等临时挂放目录 |
mnt | 系统管理员安装临时文件系统的安装点 | 额外的设备可挂载在这里,相对临时而言 |
opt | 第三方软件安装目录 | 现在习惯性的放置在/usr/local中 |
proc | 虚拟文件系统 | 通常是内存中的映射,特别注意在误删除数据文件后,比如DB,只要系统不重启,还是有很大几率能将数据找回来 |
root | 系统管理员主目录 | 除root之外,其他用户均放置在/home目录下 |
home | 存放用户文件的根目录 | |
run | 系统运行时所需文件 | 以防止在/var/run中,后来拆分成独立的/run目录。重启后重新生成对应的目录数据 |
sbin | 只有root才能运行的管理指令 | 跟bin类似,但只属于root管理员只有root才能访问 |
srv | 服务启动后需要访问的数据目录 | |
sys | 跟proc一样虚拟文件系统 | 记录核心系统硬件信息 |
tmp | 存放临时文件目录 | 所有用户对该目录均可读写 |
usr | 应用程序放置目录 | |
var | 存放系统执行过程经常改变的文件 |
比较重要的几个目录:
- /etc这个是系统中的配置文件,如果更改了该目录下的某个文件可能会导致系统不能启动。
- /bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如
ls
就是在/bin/ls
目录下的。值得提出的是,/bin, /usr/bin
是给系统用户使用的指令(除root外的通用户),而/sbin, /usr/sbin
则是给root使用的指令。 - /var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在
/var/log
目录下,另外mail的预设放置也是在这里。
用户目录
用户目录位于/home/下,例如/home/xiaobei
代码语言:javascript复制[root@iZ4q179d4eyom2Z home]# cd /home
[root@iZ4q179d4eyom2Z home]# ls
xiaobei
登录信息
代码语言:javascript复制[root@localhost /]#
#Linux的bash解析器终端用来显示主机名和当前用户的标识;
# root表示当前用户叫root(系统管理员账户)
# localhost表示当前使用的主机名叫localhost(没有设置系统名字的时候默认名称是localhost)
# / 表示你当前所处的目录位置 (这里的'/'表示你当前在根目录下)
相对路径与绝对路径
绝对路径
从/
开始的路径叫绝对路径、如:
[root@localhost /]# cd /home/xiaobei
[root@localhost /]# ls /usr
相对路径 从当前位置开始描述的路径为相对路径,如:
代码语言:javascript复制[root@localhost /]# cd ../../
[root@localhost /]# ls abc/def
. 和 .. 每个目录下都有.和..
代码语言:javascript复制. 表示当前目录
.. 表示上一级目录,即父目录
代码语言:javascript复制 例如这里切换路径时候
代码语言:javascript复制# 从 / 根目录切换到 home目录
[root@localhost /]# cd home
# 确认路径/home
[root@localhost home]# pwd
/home
# 切换到当前目录cd . 目录无变化
[root@localhost home]# cd .
# 切换到当前目录cd .. 目录回到上一级根目录
[root@localhost home]# cd ..
[root@localhost /]#
根目录下的 . 和 .. 都表示当前目录
二、Linux权限
Linux的权限有RWX
三种
r(Read,读取)
:对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目录的权限。
w(Write,写入)
:对文件
而言,具有新增,修改,删除文件内容的权限;对目录
来说,具有新建,删除,修改,移动目录内文件的权限。
x(eXecute,执行)
:对文件
而言,具有执行文件的权限;对目录
来说该用户具有进入目录的权限。
- 目录的只读访问不允许使用cd进入目录,必须要有执行的权限才能进入。
- 只有执行权限只能进入目录,不能看到目录下的内容,要想看到目录下的文件名和目录名,需要可读权限。
- 一个文件能不能被删除,主要看该文件所在的目录对用户是否具有写权限,如果目录对用户没有写权限,则该目录下的所有文件都不能被删除,文件所有者除外
- 目录的w位不设置,即使你拥有目录中某文件的w权限也不能写该文件
文件权限
文件权限就是文件的访问控制权限,即哪些用户和组群可以访问文件以及可以执行什么样的操作。
Unix/Linux 系统是一个典型的多用户系统,不同的用户处于不同的地位,对文件和目录有不同的访问权限。为了保护系统的安全性Unix/Linux系统除了对用户权限作了严格的界定外,还在用户身份认证、访问控制、传输安全、文件读写权限等方面作了周密的控制。
在 Unix/Linux 中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录。
访问用户
通过设定权限可以从以下三种访问方式限制访问权限:
代码语言:javascript复制只允许用户自己访问(所有者) 所有者就是创建文件的用户,用户是所有用户所创建文件的所有者,用户可以允许所在的用户组能访问用户的文件。
允许一个预先指定的用户组中的用户访问(用户组) 用户都组合成用户组,例如,某一类或某一项目中的所有用户都能够被系统管理员归为一个用户组,一个用户能够授予所在用户组的其他成员的文件访问权限。
允许系统中的任何用户访问(其他用户) 用户也将自己的文件向系统内的所有用户开放,在这种情况下,系统内的所有用户都能够访问用户的目录或文件。在这种意义上,系统内的其他所有用户就是 other 用户类
访问权限
用户能够控制一个给定的文件或目录的访问程度,一个文件或目录可能有读、写及执行权限:
代码语言:javascript复制读权限(r) 对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目录的权限。
写权限(w) 对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。
可执行权限(x) 对文件而言,具有执行文件的权限;对目录了来说该用户具有进入目录的权限。
注意:通常,Unix/Linux系统只允许文件的属主(所有者)或超级用户改变文件的读写权限。
代码语言:javascript复制[root@localhost /]# ls -l
总用量 20
lrwxrwxrwx. 1 root root 7 8月 31 15:48 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 8月 31 15:58 boot
...
我们来拆解结构,这里面我只列了根目录下的一部分内容
用到 ls -l 命令查看当前文件夹下详细信息,具体的命令和参数,后面会深入讲解
我们需要关注的是文件或目录的权限情况
代码语言:javascript复制l rwx rwx rwx
d r-x r-x r-x
# 首先第一个字母 在Linux中第一个字符代表这个文件是目录、文件或链接文件等等。
[ d ] 表示目录
[ l ] 表示为链接文档(link file)
[ - ] 表示为文件
[ b ] 表示为装置文件里面的可供储存的接口设备(可随机存取装置)
[ c ] 表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)
# 其次接下来的字符中,以三个为一组,且均为 [ rwx ] 的三个参数的组合
[ r ]代表可读(read)
[ w ]代表可写(write)
[ x ]代表可执行(execute)
[ - ]
# 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。
此时问题来了那么这三组一样是有什么区分尼?
# 这里就涉及到刚才所描述的访问用户权限
# 所有者 所有者表示该文件的所有者
# 用户组 表示当前用户再同一组
# 其他用户 允许系统中的任何用户访问,系统内的其他所有用户就是 other 用户类
# 可以将这个权限进行类比,如我的篮球,
# 所有者表示的是我可以玩
# 用户组表示,我可以借给我同班同学玩
# 其他用户表示,我可以借给其他班的同学玩
文件属主与属组
对于文件来说,它都有一个特定的所有者,也就是对该文件具有所有权的用户。
同时,在Linux系统中,用户是按组分类的,一个用户属于一个或多个组。
文件所有者以外的用户又可以分为文件所有者的同组用户和其他用户。
因此,Linux系统按文件所有者、文件所有者同组用户和其他用户来规定了不同的文件访问权限。
代码语言:javascript复制[root@localhost /]# ls -l
总用量 20
...
dr-xr-xr-x. 5 root root 4096 8月 31 15:58 boot
...
[root@localhost /]# cd /home
[root@localhost home]# ls -l
总用量 0
drwx------. 2 xiaobei xiaobei 83 9月 2 15:54 xiaobei
# 在以上实例中,xiaobei 文件是一个目录文件,属主和属组都为 xiaobei,属主有可读、可写、可执行的权限;与属主同组的用户无权限读写执行;其他用户也无权限读写执行
# 对于 root 用户来说,一般情况下,文件的权限对其不起作用。