美文网首页Linux运维之家程序员开发
Linux实用知识持续构建——基础篇

Linux实用知识持续构建——基础篇

作者: liufxlucky365 | 来源:发表于2016-07-20 17:24 被阅读122次

    这是什么

    本文将持续更新在学习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

    相关文章

      网友评论

      本文标题:Linux实用知识持续构建——基础篇

      本文链接:https://www.haomeiwen.com/subject/svwvjttx.html