这是什么
本文将持续更新在学习Linux过程中遇到的基础知识点的总结,为了简单实用,避免长篇大论令人生厌,尽量保持简洁.
或有不准确的地方,请注意
Linux简史
计算机的发明
- 各大厂家各自制造机器,市场充斥着各种大型机(IBM GE HP)和小型机(Intex).
- 各个厂家从硬件到软件维护自己的产品.
Unix诞生
- 最早的大型机只能服务数十人,于是Bell实验室跟GE MIT合作启动MULTICS计划,旨在开发一个能够服务上百人的多用户,多任务,多层级操作系统,卒
- Ken Thompson为了玩一款<星际旅行>的游戏,反MULTICS其道而行,力求简洁实用,诞生了Unix
- 后续Thompson被汇编语言折腾受不了,发明了c语言,重写了Unix内核(1970)
- 由于全新的Unix易于开发移植,同时功能强大,所以迅速发展,各大厂商也开始兼容Unix,并诞生了POSIX,规范OS提供的编程接口
- AT&T禁止Unix传播,Unix开始内战,互不兼容,各自为战,一发不可收拾的出现各种变种(Windows开始坐大)
- Berkeley发布FreeBSD
GNU (GNU's not Unix)
- Stallman发起自由软件计划
- GPL授权诞生,确定了开源软件服务化的商业空间
- GNU计划开发兼容Unix的操作系统,但是为了先易后难,从应用软件下手
- gcc emacs glibc bash...等一大批优秀的开源软件诞生
Linux
- Linus Torvalds(芬兰大学生)在一个教授开发的Unix简易教学版minix上学习,但由于教授不愿意继续开发,他便酝酿自己的操作系统
- Linus发布了自己写的"小玩意儿",吸引了大量黑客的兴趣
- 为了效率Linus主要开发内核,而将源码免费开放,所有人协同开发,统一整合
- 开源,分布式开发,虚拟团队,快速迭代...这些令人兴奋的事件都拉开了序幕
- Linux正式确定,同时支持移植386小型家用机
- 厂商开始支持Linux,由于Linux使用gcc,bash等很多GNU计划的工具,GNU也顺理成章的采用Linux,填补了开源内核这一空白
Linux主要目录
主要目录
-
/
根目录,存放着系统核心程序 -
/usr
unix software resource,存放unix厂商(可能是改版的发行者)开发的软件资源 -
/usr/local
存放用户安装的软件资源 -
/opt
option(选装),存放第三方厂商开发的软件资源 -
/lost+found
标准ext2/ext3文件系统才会有该目录,主要是在文件系统异常时暂存碎片,日后恢复 -
/boot
系统启动所需程序 -
/home
系统用户主文件夹 -
/mnt
临时设备挂载点 -
/var
见下文 -
/proc
见下文
此外还有一些目录经常成套出现在以上个别目录中,意义是差不多的
-
/bin
二进制可执行文件,在/中为与系统运行相关 -
/sbin
二进制可执行文件,主要是系统维护相关 -
/include
c/c++常用头文件,我们在以源码包方式编译安装软件时,会使用 -
/lib
应用软件的函数库,目标文件 -
/etc
配置文件 -
/src
源码 -
/tmp
临时文件夹
/var
主要存放一些经常变化的文件,和系统运行过程中产生的文件
- /var/run 一般是各个进程用于存放运行时的信息,如nginx.id
- /var/lock 进程控制资源的锁
- /var/cache 进程运行中的一些缓存
/proc
这个目录比较特殊,是一个虚拟文件系统,保存着系统内核,进程,外设,网络等的状态,数据全在内存中,本身不占用
任何硬盘空间,比较重要的目录有/proc/cpuinfo, /proc/ioports, /proc/net/*
注意linux中文件的目录结构只是逻辑结构, 真正的物理结构还要看实际挂载位置
文件与目录权限
权限基础
linux中每个文件(目录本质也是文件),都会有一组以下权限串rwxrwxrwx
- r 读权限
- w 写权限
- x 执行权限
另外,这三组rwx分别代表了对于文件创建者,文件用户组,其他人的权限
通常也会用三个八进制数来表示权限,比如rwxrwxrwx
会用777
表示,r-x-wx---
用530
表示
inode
inode是linux的重要概念,对于理解权限如何发挥作用和软硬链接非常有用
inode可以理解为linux存储文件的'本体',文件名与inode的关系类似ip于域名的关系,系统底层真正操作的是inode
inode保存了文件的拥有者,用户组,权限,字节数,存储位置...
相关命令
-
stat file
查看文件inode信息 -
ls -i
查看文件inode号
rwx于文件意义
- r 是否可以读取文件内容
- w 是否可以更改文件内容
- x 是否可以执行文件
rwx于目录意义
- r 是否可以获取到目录中文件
- w 是否可以在目录中新建,删除,重命名
- x
- 是否可以cd进入目录;
- 是否可以读取包含文件的inode信息,这就导致x其实是rw的前提(即便有r权限,可以知道文件名但因为无法读取inode,不能获取文件类型大小等);
- x权限是会影响子目录的,rw不会,即无父目录的rw,也不影响子的rw权限;
权限修改
文件权限修改有两种办法
chmod 777 file
-
chmod [a|u|g|o]+r-w file
u为拥有者,g为用户组,o为其他,a为全部,+为添加,-为去掉,比迁一种要容易记一些
相关命令
-
chgrp
修改文件用户组, chgrp [-R] users file, 改变file文件的用户组为users,-R为递归修改 -
chown
修改文件, chown [-R] user[:group] file, 除了改变文件拥有者,还可以修改文件用户组
默认权限
umask控制,类似子网掩码. 创建文件时,系统会去掉umask标记的权限,比如umask为111则创建的文件权限为666
但要注意,无论umask如何设置新建的文件都不会具有x权限,为了安全起见, 一般umask为022
-
umask
查看umask值 -
umask 022
设置umask
SetUID (SUID)
想想这样的场景, /etc/shadow文件中保存着所有用户的密码信息,只有管理员能查看. /usr/bin/passwd为修改密码程序
所有用户都有执行该程序的权限, 但是我们进程的权限与启动用户一致的, 那非管理员启动的passwd进程是如何修改密码呢?
这是由特殊权限SetUID控制的, 当文件拥有者的权限中执行位为s时, 其他用户执行该文件期间可以具有拥有者的权限,
仅对二进制文件有效
类似的还有SetGID(SGID), 表明执行期间拥有文件所在用户组的权限
Sticky Bit (SBIT)
想想这样的场景, 团队公共目录 ~/work, 所有人都拥有该目录的x权限, 所以都能够进行删减和重命名, 如何避免误操作?
只需要为目录设置SBIT权限即可, SBIT只对目录有效, 设置后仅有root或拥有者可以删减对应文件
SUID SGID SBIT权限修改
第一种是在原来三位权限前再添加一位
- 4 SUID
- 2 SGID
- 1 SBIT
比如chmod 4666 file
或者使用符合, chmod u+s|g+s|o+t file
注意当看到S或者T时, 说明无效, 比如不具备目录w权限, t就无效
软硬链接
linux中有软硬链接文件, 可以方便用户管理和使用文件系统, 首先回忆一下前文中inode的概念...
硬链接
并未创建新的inode节点, 只是新建了一个文件名, 并指向源inode, 通过ls -i
可以看到文件的链接数+1
当删除源文件时, 不会影响链接文件. 创建硬链接ln source target
因为是公用inode所以就决定, 硬链接不能跨文件系统, 不能远程
软链接
新建了一个链接文件, 然后这个文件指向了源inode, 类似windows的快捷方式, 创建方式ln -s source target
网友评论