[Note] Linux学习笔记1-4 文件相关

589 查看

Note 1 Linux 和 Shell 简介

Linux系统

是多进程、多用户和交互式的计算环境。
Linux系统的运行级别从0-6共7个:

  • 0:停机,关闭系统

  • 1:单用户模式,类似win下的安全模式

  • 2:多用户模式,但是没有NFS支持

  • 3:完整的多用户模式,是标准的运行级别

  • 4:保留

  • 5:X Windows系统

  • 6:重新启动

Shell

是Linux系统的用户界面,提供了用户与内核进行交互的接口。它接受用户输入的命令,并把它们送到内核运行。
shell的命令可以分为内置命令和外部命令。内部命令是shell通过执行自己代码中对应部分来完成的。外部命令的代码则存放在一些二进制的可执行文件或者shell脚本中。
外部命令的搜索路径保存在一个shell变量:PATH 中。使用echo $PATH 可以打印查看。PATH保存在主目录的.profile或者.login中。
其他一些比较有用的环境变量如下:

  • HISTFILE:储存历史命令

  • HISTSIZE:历史命令列表的大小

  • HOME:当前用户的主目录

  • OLDPWD:前一个工作目录

  • PATH:bash寻找可执行文件的搜索路径

  • PS1:命令行的一级提示符

  • PS2:命令行的二级提示符

  • PWD:当前工作目录

  • SECONDS:当前shell开始后经过的时间,单位为秒

Note 2 Linux文件系统

文件分类

Linux中,文件是一个字节序列。
Linux文件可以分为:普通文件、目录文件、字符设备文件、块设备文件、符号链接文件、管道文件、socket文件,具体如下:

  • 普通文件:文本文件等

  • 目录文件:文件系统中一个目录所包含的目录项组成的文件

  • 设备文件:Linux把对设备的I/O作为对文件的读取/写入操作

  • 符号链接文件:提供了共享文件的一种方法

  • 管道文件:用于在进程之间传递数据

  • socket文件:套接字文件

标准目录

Linux有一些标准的目录和文件

  • /sbin:用来存放系统管理员的系统管理程序

  • /home:存放用户的主目录,比如,建立一个名为xiaoming的用户,那么在/home目录下就有一个对应的/home/xiaoming路径,作为用户的主目录

  • /lib:存放系统动态链接库

  • /mnt:用来临时装载文件系统

  • /opt:存放附加软件包

  • /proc:存放进程和系统的信息

  • /root:root用户的主目录

  • /tmp:存放不同程序执行时产生的临时文件

  • /usr:是linux最大的目录之一,存放可以在不同主机间共享的只读数据

  • /lost+found:存放所有和其他目录没有关联的文件

  • /var:存放在系统运行过程中可能会不断变化的数据,比如,/var/log存放系统日志

Note 3 Linux文件安全

权限机制

Linux属于多用户操作系统,使用基于权限的文件保护机制
文件的所有者可以设置特定的访问权限来限制哪些用户可以对某文件进行哪些操作

文件的权限设置针对三个对象:所有者、组、其他人
用户可以属于一个组,系统中所有用户组的信息记录在/etc/group中
root用户可以访问所有文件

Linux中文件有三种访问权限:

  1. r:read,允许读某个文件

  2. w:write,允许写、修改和删除某个文件

  3. x:execute,允许执行某个文件

对于目录文件,含义稍微有所不同:

  1. r:允许用户列出目录内容,如ls

  2. w:允许用户在目录下创建、删除文件

  3. x:允许用户搜索这个目录,如果没有x权限,则不能用ls-l和cd

使用ls -l命令时,第一个字段的10位符号的含义:

  • 第1位:表式文件类型,-为普通文件、d为目录文件、b为块设备文件、c为字符设备文件、l为链接文件、p为管道文件、s为socket文件

  • 2-4位,5-7位,8-10位分别表示该文件对于所有者、组、其他人的权限,三位按顺序分别表示rwx三种权限

例如:drwxr-x--- 表示一个目录文件,所有者有rwx三种权限,用户组有r和x权限,而其他人没有任何权限

使用chmod可以修改文件的访问权限,具体的命令说明请参考man chmod

当创建一个文件时,文件的默认权限由umask决定
在终端输入umask,会输出一个4位的8进制数字,第一个数字表示SUID、SGID、Sticky,暂时不考虑它。后三位则对应三种用户分类的权限。
当创建一个文件时,新创建的文件的访问特权都将被设为1,除了在umask参数中为1的对应位(以二进制来看)

关于SUID、SGID、Sticky

通过有效用户标识位,我们可以允许普通用户以文件所有者或者用户组的权限运行某个可执行文件
应用场景:文件/etc/passwd,只有超级用户才有权限访问该文件,但是我们又希望其他用户能够执行passwd命令来修改其自己的密码,而又不改变其他用户的信息。

每个linux文件都有一个附加的保护位SUID,如果堆一个可执行文件设置乐该位,那么该可执行文件可以以这个文件的拥有者的权限运行

可以通过chmod 4xxxx filelist 或者chmod u+s filelist两种方式设置SUID
当文件的SUID被设为1时,如果所有者对该文件有执行权限,那么执行位被设为‘s’,否则被设为‘S’
比如:
-rwx--x--- 设置SUID之后为 -rws--x---
-rw---x--- 设置SUID之后为 -rwS--x---

SGID和SUID很相似,不过被设为s/S的位是组的可执行位。
命令为chmod 2xxx filelist 或者 chmod g+s filelist

Sticky位
考虑这样一种情况,如果用户拥有某个目录的写权限,用户可能删除这个目录下的文件,而我们并不希望这些文件被删除
通过设置sticky位,可以保证只有文件拥有者可以删除或重命名某个目录下的文件,即使其他用户有写权限也不行

命令为 chmod 1xxx filelist 或者 chmod +t filelist
如果sticky被设为1,那么如果其他用户对目录有可执行权限,则权限为被设为‘t’,否则为‘T’
比如:-rwxrw---t -rwxrw---T

Note 4 Linux文件链接

硬链接

是一个指向文件节点的指针,因此硬链接和原文件的inode编号是相同的
当创建一个硬链接后,该文件节点的链接计数+1,此时,删除原文件或硬链接,文件并不会被删除,只是链接计数-1,只有在链接计数为0时,该节点才会被删除。

特点:

  1. 不可跨越文件系统

  2. 超级用户才能创建目录硬链接

  3. 占用空间极少

软链接(符号链接)

创建软链接,是创建一个新的link类型的文件,将这个新文件登记在用户共享目录项里,这个新文件包含被连接文件的路径
当用户通过软链接访问文件时,操作系统把link文件的文件内容作为路径名去访问真正的文件

特点:

  1. 可以跨越文件系统

  2. 如果被链接的文件被移动,则符号链接失效

  3. 占用空间多于硬链接,需要存储inode