1. Linux文件管理

Linux中的所有数据都被保存在文件中,所有的文件被分配到不同的目录。目录是一种类似于树的结构,称为文件系统。

1.1. 文件类型

1、普通文件

普通文件是以字节为单位的数据流,包括文本文件、源码文件、可执行文件等。文本和二进制对Linux来说并无区别,对普通文件的解释由处理该文件的应用程序进行。

2、目录

目录可以包含普通文件和特殊文件,目录相当于Windows和Mac OS中的文件夹。

3、设备文件

Linux 与外部设备(例如光驱,打印机,终端,modern等)是通过一种被称为设备文件的文件来进行通信。Linux 输入输出到外部设备的方式和输入输出到一个文件的方式是相同的。Linux 和一个外部设备通讯之前,这个设备必须首先要有一个设备文件存在。

设备文件和普通文件不一样,设备文件中并不包含任何数据。

设备文件有两种类型:字符设备文件块设备文件

  • 字符设备文件以字母"c"开头。字符设备文件向设备传送数据时,一次传送一个字符。典型的通过字符传送数据的设备有终端、打印机、绘图仪、modern等。字符设备文件有时也被称为"raw"设备文件。
  • 块设备文件以字母"b"开头。块设备文件向设备传送数据时,先从内存中的buffer中读或写数据,而不是直接传送数据到物理磁盘。磁盘和CD-ROMS既可以使用字符设备文件也可以使用块设备文件。

1.2. 文件属性

可以使用ls -al来查看当前目录下的所有文件列表。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
[root@www ~]# ls -al
total 156
drwxr-x---   4    root   root     4096   Sep  8 14:06 .   # 当前目录
drwxr-xr-x  23    root   root     4096   Sep  8 14:21 ..  # 父目录
-rw-------   1    root   root     1474   Sep  4 18:27 anaconda-ks.cfg
-rw-------   1    root   root      199   Sep  8 17:14 .bash_history
-rw-r--r--   1    root   root       24   Jan  6  2007 .bash_logout
-rw-r--r--   1    root   root      191   Jan  6  2007 .bash_profile
-rw-r--r--   1    root   root      176   Jan  6  2007 .bashrc
-rw-r--r--   1    root   root      100   Jan  6  2007 .cshrc
drwx------   3    root   root     4096   Sep  5 10:37 .gconf      
drwx------   2    root   root     4096   Sep  5 14:09 .gconfd
-rw-r--r--   1    root   root    42304   Sep  4 18:26 install.log
-rw-r--r--   1    root   root     5661   Sep  4 18:25 install.log.syslog
[    1   ] [ 2 ][   3  ][  4 ]  [  5   ] [    6     ] [       7          ]
[  权限   ][文件数][所有者] [用户组][文件容量][ 修改日期   ] [      文件名      ]

每列含义说明:

  • 第一列:文件类型。
  • 第二列:表示文件个数。如果是文件,那么就是1;如果是目录,那么就是该目录中文件的数目。
  • 第三列:文件的所有者,即文件的创建者。
  • 第四列:文件所有者所在的用户组。在Linux中,每个用户都隶属于一个用户组。
  • 第五列:文件大小(以字节计)。
  • 第六列:文件被创建或上次被修改的时间。
  • 第七列:文件名或目录名。

2. 文件权限和访问模式

2.1. 查看文件权限

Linux每个文件都有三类权限:

  • 所有者权限(user):文件所有者能够进行的操作
  • 组权限(group):文件所属用户组能够进行的操作
  • 外部权限(other):其他用户可以进行的操作。

通过ls -l的命令可以查看文件权限信息。

1
2
3
$ls -l /home/amrood
-rwxr-xr--  1 amrood   users 1024  Nov 2 00:10  myfile
drwxr-xr--- 1 amrood   users 1024  Nov 2 00:10  mydir

第一列-rwxr-xr-- 包含了文件或目录的权限。

除了第一个字符-d分别用来表示文件目录外,其他的九个字符可以分为三组,分别对应所有者权限用户组权限其他用户权限,即-|user|group|other

每组的权限又可分为三类:

  • 读取(r),对应权限数字4

  • 写入(w),对应权限数字2

  • 执行(x),对应权限数字1

使用数字表示权限:

2.3. 权限的操作

2.3.1. chmod

chmod (change mode) 命令来改变文件或目录的访问权限,权限可以使用符号或数字来表示。

1、通过符号方式

可以使用符号来改变文件或目录的权限,你可以增加(+)和删除(-)权限,也可以指定特定权限(=)。

指定权限范围

  • u (user):所有者权限
  • g(group):所属用户组权限
  • o(other):其他用户权限
符号 说明
+ 为文件或目录增加权限
- 删除文件或目录的权限
= 设置指定的权限

2.3.2. chown

chown 命令是"change owner"的缩写,用来改变文件的所有者

1
2
3
4
# user可以是用户名或用户ID
$ chown user filelist
# 例如:
$ chown amrood testfile

超级用户 root 可以不受限制的更改文件的所有者和用户组,但是普通用户只能更改所有者是自己的文件或目录。

2.3.3. chgrp

chgrp 命令是"change group"的缩写,用来改变文件所在的群组

1
2
3
4
# group可以是用户组名或用户组ID
$ chgrp group filelist
# 例如:
$ chgrp special testfile

2.4. SUID和SGID位

在Linux中,一些程序需要特殊权限才能完成用户指定的操作。例如密码文件/etc/shadow

Linux 通过给程序设置SUID(Set User ID)和SGID(Set Group ID)位来赋予普通用户特殊权限。当我们运行一个带有SUID位的程序时,就会继承该程序所有者的权限;如果程序不带SUID位,则会根据程序使用者的权限来运行。

例如:

1
2
$ ls -l /usr/bin/passwd
-r-sr-xr-x  1   root   bin  19031 Feb 7 13:47  /usr/bin/passwd*

上面第一列第四个字符不是’x’或’-’,而是’s’,说明 /usr/bin/passwd 文件设置了SUID位,这时普通用户会以root用户的权限来执行passwd程序。

小写字母’s’说明文件所有者有执行权限(x),大写字母’S’说明程序所有者没有执行权限(x)。

为一个目录设置SUID和SGID位可以使用下面的命令:

1
2
3
$ chmod ug+s dirname
$ ls -l
drwsr-sr-x 2 root root  4096 Jun 19 06:45 dirname

其他笔记

[[post/14.新语言学习记录/linux/linux基础原理杂记/linux_inode原理 | inode原理,软硬链接]] [[post/14.新语言学习记录/linux/linux基础原理杂记/Linux文件系统原理/linux_file_storage_inode|inode存储结构等]]