Please indicate the source: http://blog.csdn.net/gaoxiangnumber1
Welcome to my github: https://github.com/gaoxiangnumber1
5.1 使用者与群组
- Linux是多人多任务系统,它将文件可存取的身份分为三个类别:owner、group、others,三种身份各有read、write、execute等权限。
Linux用户身份与群组记录的文件
- Linux默认情况下,所有系统上的账号、一般身份使用者、root的信息都记录在/etc/passwd;密码记录在/etc/shadow;所有的组名记录在/etc/group。
5.2 Linux文件权限概念
5.2.1 Linux文件属性
xiang:~ $ sudo -i #切换身份
Password:
root:~ # ls -al
total 48
drwxr-xr-x 3 root root 17 May 6 00:14 .config
-rw-r--r-- 1 root root 1864 May 4 18:01 initial-setup-ks
[1] [2] [3] [4] [5] [6] [7]
[权限] [连结] [拥有者] [群组] [文件容量] [修改日期] [档名]
- ls(代表list)显示文件的文件名与相关属性。-al表示列出所有文件的权限与属性(包含隐藏文件,即文件名第一个字符为“.”的文件)。
- 第一栏代表文件的类型与权限。共十个字符:
- 字符[1]:d是目录;-是文件;l是连结档(link file);b是装置文件中可供储存的接口设备(可随机存取装置);c是装置文件中的串行端口设备(如鼠标等一次性读取装置)。
- 字符[2, 9]:三个一组,均为rwx的组合(r可读、w可写、x可执行、-没有相应权限)。第一组为文件拥有者的权限;第二组为此群组中账号的权限;第三组为非本人且不属于本群组的账号的权限。
- 第二栏表示有多少档名连结到此节点(i-node)。每个文件都会将它的权限与属性记录到文件系统的i-node中,但目录树使用文件名来记录,因此每个档名会连结到一个i-node。该属性记录有多少不同的档名连结到同一个i-node号码。
- 第三栏表示这个文件/目录的拥有者账号。
- 第四栏表示这个文件的所属群组。一个账号会加入一个或多个群组。
- 第五栏为这个文件的容量大小,默认单位为byte。
- 第六栏为这个文件的建档日期或者是最近的修改日期。内容为月/日/时间。如果被修改的时间距离现在太久,那么时间仅显示年份。利用
ls -l --full-time
显示完整的时间格式。 - 第七栏为这个文件的档名。档名开头为“.”代表这个文件为隐藏档。
5.2.2 如何改变文件属性与权限
chgrp改变所属群组
chgrp [-R] directory-name/file-name ...
- -R:进行递归变更,即连同次目录下的所有文件、目录都更新为这个群组。
- 要被改变的组名必须在/etc/group内,否则就会显示错误。
chown改变文件拥有者
chown [-R] 账号名称 文件或目录
chown [-R] 账号名称:组名 文件或目录
- 用户必须是已经存在系统中的账号,即在/etc/passwd文件内。
也可以用chown user.group file
,即在拥有者与群组间加上小数点。
chmod数字类型改变文件权限
- 文件的基本权限有九个:3种身份(owner/group/others)*3种权限(read/write/execute)。使用数字来代表权限:
r:4 w:2 x:1
。每种身份的三个权限的分数累加。
chmod [-R] xyz 文件或目录
- xyz:每一个代表一种身份的rwx属性数值的累加和。
例:新建shell脚本的权限是-rw-rw-r--
,若要将该文件变成可执行文件,且不允许它人修改,即-rwxr-xr-x
,下达chmod 755 test.sh
。
chmod符号类型改变文件权限
- 用a代表全部身份的权限,u/g/o代表三种身份的权限,r/w/x代表读/写/执行的权限。
chmod [u,g,o,a] [+,-,=] [r,w,x] 文件/目录
- 设定.bashrc的权限为-rwxr-xr-x:
chmod u=rwx,go=rx .bashrc
注意u=rwx,go=rx
连在一起,中间无空格符。 - +/-:没指定的权限不会变。只增加每个人可写.bashrc的权限:
chmod a+w .bashrc
5.2.3 目录与文件之权限意义
权限对文件
- 权限对文件的意义:
r:可读取该文件的内容。
w:可修改该文件的内容,但没有删除该文件的权限。
x:该文件可被系统执行的权限。 - 在Windows下一个文件是否可执行由扩展名决定;在Linux下由是否有x权限决定。
权限对目录
- r:可读取目录结构列表。
w:可修改目录,包括
(1)建立新文件与目录。
(2)删除存在的文件与目录(无论被删除的文件/目录本身的权限是什么)。
(3)重命名已存在的文件或目录。
(4)移动目录内的文件或目录的位置。
x:代表用户能否进入该目录使其成为工作目录。
root :~ # cd /tmp
root :/tmp # mkdir testing
root :/tmp # chmod 744 testing
root :/tmp # touch testing/testing
root :/tmp # chmod 600 testing/testing
root :/tmp # ls -ald testing testing/testing
drwxr--r--. 2 root root 20 Jun 3 01:00 testing #目录权限744,群组与使用者均为root
-rw-------. 1 root root 0 Jun 3 01:00 testing/testing
xiang :/~ $ cd /tmp
xiang :/tmp $ ls -l testing/
ls: cannot access test/test: Permission denied
total 0
-????????? ? ? ? ? ? testing #有r权限可以查询档名
#因为没有x,所以会有一堆问号。
xiang :/tmp $ cd testing/
-bash:cd:testing/:Permission denied
#因为没有x,所以无法进入。
- 只有r可以让用户读取目录的文件名列表,不过详细的信息读不到,同时也不能将该目录变成工作目录(用cd 进入该目录)。
root :/tmp # chown xiang testing
root :/tmp # ls -ld testing
drwxr--r--. 2 xiang root 20 6月 3 01:00 testing # xiang有全部权限
xiang :/tmp $ cd testing
xiang :/tmp/test $ ls -l #可以进入目录
-rw-------. 1 root root 0 Jun 3 01:00 testing #文件不是xiang的。
xiang :/tmp/test $ rm testing #尝试删除这个文件
rm:remove write-protected regular empty file `testing'?y #可以删除
用户操作功能与权限
- xiang针对/dir1、/dir1/file1、/dir2三个档名来说,分别需要哪些最小的权限才能达成各项任务?
操作动作 | /dir1 | /dir1/file1 | /dir2 | 重点 |
---|---|---|---|---|
读取file1内容 | x | r | - | 能进入/dir1才能读里面的文件数据 |
修改file1内容 | x | rw | - | 能进入/dir1且能修改file1 |
执行file1内容 | x | rx | - | 能进入/dir1且file1能执行 |
删除file1文件 | wx | - | - | 能修改/dir1目录的权限 |
将file1复制到/dir2 | x | r | wx | 能读file1且能修改/dir2目录 |
- 目录的r代表能看到目录内的所有文件名称(非内容),但若已经知道里面文件的位置,可以没有r来修改目录及其中的文件。没有r的影响是使用tab时,无法自动补齐档名。
5.2.4 Linux文件种类与扩展名
- 任何装置在Linux下都是文件。
文件种类
- 正规文件(regular file):
ls -al
显示的第一个字符为“-”。按照文件内容可分为:
- 纯文本文件(ASCII)。纯文本文件的内容是人可以直接读到的数据。
- 二进制文件(binary)。Linux的可执行文件(除了script、文字型批处理文件)是这种格式。
- 数据格式文件(data file)。有些程序在运行时会读取某些特定格式的文件,这些文件被称为数据文件。例:Linux在使用者登入时,会将登录的数据记录在/var/log/wtmp文件内,该文件是一个data file,能通过last指令读出;但使用cat会读出乱码,因为它属于一种特殊格式的文件。
- 目录(directory)。第一个属性为“d”。
- 连结档(link)。第一个属性为“l”。
- 设备与装置文件(device)。与系统周边及储存相关的文件,通常集中在/dev目录下,分为两种:
- 区块(block)设备文件。是储存数据以提供系统随机存取的接口设备,如硬盘。第一个属性为“b”。
- 字符(character)设备文件。是串行端口的接口设备,如鼠标。这些设备的特点是一次性读取,不能够截断输出,如不能让鼠标跳到另一个画面,而是连续性滑动到另一个地方。第一个属性为“c”。
- 数据接口文件(sockets)。该类型的文件通常用于网络的数据收发。第一个属性为“s”。
- 数据传送文件(FIFO,pipe)。FIFO的主要目的是解决多个程序同时存取同一个文件所造成的问题。第一个属性为“p”。
Linux文件扩展名
- Linux文件能否被执行与x属性有关,与文件名无关。有可执行权限≠有可执行的程序代码,没有可执行程序代码的文件即使增加x权限也无法被执行。
- 常用扩展名:
*.sh
:脚本或批处理文件(scripts)。
*Z,*.tar,*.tar.gz,*.zip,*.tgz
:压缩文件。
*.html,*.php
:HTML语法与PHP语法的网页文件。
Linux文件长度限制
- Linux的Ext2/Ext3/Ext4文件系统对文件档名长度的限制:单一文件或目录的最大文件名为255-byte。
Linux文件名限制
- 避免字符- + * ? > < ; & .[ ] | \ ’ ” ` () { }”因为这些符号在文字接口下有特殊意义。
- 文件名的开头为小数点代表隐藏文件。
5.3 Linux目录配置
5.3.1 Linux目录配置的依据-Filesystem Hierarchy Standard(FHS)
- FHS规范每个特定的目录下应该放什么样的数据。FHS依据文件系统使用的频率和是否允许使用者修改, 将目录定义成四种交互作用的形态,如下表格。
可分享的(sharable) | 不可分享的(un-sharable) |
---|---|
不变的-static | /usr(软件存放处) |
/opt(第三方协议软件) | |
可变动的-variable | /var/mail(使用者邮件信箱) |
/var/spool/news(新闻组) |
- 可分享的:可以分享给其它主机挂载用的目录。
- 不可分享的:本机器上运行的装置文件或是与程序有关的socket文件等。因为仅与自身机器有关,所以不适合分享给其它主机。
- 不变的:有些数据不随着distribution变动,如函式库。
可变动的:经常改变的数据,如登录文件等。
- FHS针对目录树定义出三层目录下面应该存放的数据,即下面三个目录的定义:
- /(root):与开机系统有关。
- /usr(unix software resource):与软件安装、执行有关。
- /var(variable):与系统运行过程有关。
- 从账号角度看,root指系统管理员的身份;从目录角度看,root指根目录/。FHS定义根目录下应有下面这些次目录,即使没有实体目录,也至少有连结档。
- FHS针对目录树定义出三层目录下面应该存放的数据,即下面三个目录的定义:
第一部分:FHS要求必须要存在的目录
目录 | 应存放文件内容 |
---|---|
/bin | /bin下的指令可以被root与一般账号使用,在单人维护模式下还能被操作。 |
/boot | 主要存放开机用到的文件,包括Linux核心文件、开机选单、开机配置文件等。Linux kernel常用的档名为vmlinuz;若使用grub2开机管理程序,则会存在/boot/grub2/目录。 |
/dev | 存放Linux的所有装置与接口设备文件。只要通过存取该目录下的某文件,就等于存取某个装置。 |
/etc | 存放系统主要的配置文件,如账号密码文件、各种服务的启始档等。该目录的各文件可以让一般使用者查阅,但只有root有权力修改。FHS建议不要存放可执行文件(binary)在该目录中。FHS规定下列目录最好存放在/etc/下:/etc/opt(必要:该目录存放第三方协议软件/opt的相关配置文件)、/etc/X11/(建议:存放与X Window有关的配置文件)、/etc/sgml/(建议:存放与SGML格式有关的配置文件)、/etc/xml/(建议:存放与XML格式有关的配置文件)。 |
/lib | 存放在开机时用到的函式库,以及在/bin或/sbin下面的指令会呼叫的函式库。FSH要求/lib/modules/目录必须存在,该目录存放可抽换式的核心相关模块(驱动程序)。 |
/media | 存放可移除的装置:软盘、光盘等装置都暂时挂载于此。 |
/mnt | 存放暂时挂载的额外装置。 |
/opt | 存放第三方协议软件。如KDE桌面管理系统。也能将额外的软件(非原本distribution提供)安装到这里。 |
/run | FHS规定系统开机后产生的各项信息应该要存放到/run下面。 |
/sbin | 存放在开机过程中需要的指令(如开机、修复、还原系统需要的指令)。服务器软件程序一般存放到/usr/sbin/中。本机自行安装的软件产生的系统执行文件存放到/usr/local/sbin/中。 |
/srv | srv为service的缩写,是一些网络服务启动后,这些服务需要取用的数据目录。如WWW服务器需要的网页资料可以存放在/srv/www/。 |
/tmp | 这是让一般用户或正在执行的程序暂时存放文件的地方。任何人都能存取该目录。FHS建议在开机时将/tmp下的数据都删除。 |
/usr | 第二层FHS设定,后续介绍。 |
/var | 第二层FHS设定,主要存放变动性的数据,后续介绍。 |
第二部分:FHS建议存在的目录。
目录 | 应存放文件内容 |
---|---|
/home | 这是默认的用户家目录。家目录有两种代号:(1)~ 代表目前用户的家目录。(2)~xiang 代表xiang的家目录。 |
/lib | 存放与/lib不同格式的二进制函式库,如支持64位的/lib64函式库。 |
/root | 系统管理员root的家目录。 |
- 下面是在Linux中也是非常重要的目录:
目录 | 应存放文件内容 |
---|---|
/lost+found | 使用标准的ext2/ext3/ext4文件系统格式才会产生该目录。目的:当文件系统发生错误时,将遗失的片段存放到该目录下。 |
/proc | 该目录是一个虚拟文件系统(virtual file system)。它存放的数据都在内存中(如系统核心、进程信息、网络状态等),不占硬盘空间。 |
/sys | 该目录也是一个虚拟文件系统,也记录核心与系统硬件相关的信息,也不占硬盘容量喔。 |
- Linux发生问题时,救援模式仅挂载根目录,因此有5个目录被要求一定要与根目录存放在一起:/etc、/bin、/dev、/lib、/sbin。
/usr(Unix Software Resource)的意义与内容
- 所有系统默认的软件(distribution发布者提供的软件)都会存放到/usr下,它的次目录建议有下面这些:
第一部分:FHS要求/usr必须要存在的目录
目录 | 应存放文件内容 |
---|---|
/usr/bin/ | 存放一般用户都能够使用的指令。FHS要求此目录不应该有子目录。 |
/usr/lib/ | 基本上与/lib功能相同,/lib链接到此目录。 |
/usr/local/ | 建议将系统管理员下载的软件(非distribution默认提供)安装到此目录。 |
/usr/sbin/ | 存放非系统正常运行所需要的系统指令。/sbin是链接到此目录。 |
/usr/share/ | 存放只读数据文件,包括共享文件。常见次目录:/usr/share/man(联机帮助文件)/usr/share/doc(软件说明文件) |
第二部分:FHS建议/usr可以存在的目录
目录 | 应存放文件内容 |
---|---|
/usr/games/ | 存放与游戏相关的数据 |
/usr/include/ | 存放C/C++等语言的header与include。 |
/usr/libexec/ | 存放使用者不常用的执行档或脚本。 |
/usr/lib/ | 与/lib/功能相同,/lib链接到此目录 |
/usr/src/ | 存放一般原始码;核心原始码存放到/usr/src/linux/目录。 |
/var的意义与内容
- /var存放经常变动的文件,包括缓存(cache)、登录档(log file)以及某些软件运行产生的文件。常见的次目录:
第一部分:FHS要求/var必须要存在的目录
目录 | 应存放文件内容 |
---|---|
/var/cache/ | 存放程序运行过程中产生的暂存档。 |
/var/lib/ | 存放程序执行过程中需要用到的数据文件。此目录下各自的软件应该要有各自的目录。 |
/var/lock/ | 某些装置或文件一次只能被一个程序使用,如果同时有两个程序使用,可能产生错误,因此要将该装置上锁(lock),确保该装置只会给单一软件使用。 |
/var/log/ | 存放登录文件的目录。 |
/var/mail/ | 存放个人电子邮件的目录。该目录也被存放到/var/spool/mail/中,通常这两个目录互为链接文件。 |
/var/run/ | 某些程序或服务启动后,会将它们的PID存放在该目录下。该目录链接到/run。 |
/var/spool/ | 存放排队等待其它程序使用的数据,这些数据被使用后通常会被删除。 |
5.3.2 目录树(directory tree)
- Linux所有文件与目录都是由根目录开始,然后一个个分支下来,称为目录树(directory tree)。特性有:
- 目录树的启始点为根目录(/)。
- 每个目录既能使用本地partition的文件系统,也能使用网络上的filesystem。
- 每一个文件在目录树中的文件名(包含完整路径)都是唯一的。
xiang :~ $ ls -l /
total 152
drwxr-xr-x 2 root root 4096 7月 13 07:36 bin
drwxr-xr-x 4 root root 4096 7月 13 07:37 boot
drwxrwxr-x 2 root root 4096 7月 25 2015 cdrom
drwxr-xr-x 18 root root 4240 10月 9 07:59 dev
drwxr-xr-x 150 root root 12288 10月 9 07:59 etc
drwxr-xr-x 3 root root 4096 7月 25 2015 home
lrwxrwxrwx 1 root root 33 7月 13 07:36 initrd.img -> boot/initrd.img-3.16.0-76-generic
lrwxrwxrwx 1 root root 33 9月 20 2015 initrd.img.old -> boot/initrd.img-3.16.0-49-generic
drwxr-xr-x 24 root root 4096 7月 13 07:35 lib
drwxr-xr-x 2 root root 12288 7月 13 07:35 lib32
drwxr-xr-x 2 root root 4096 7月 13 07:35 lib64
drwx------ 2 root root 16384 7月 25 2015 lost+found
drwxr-xr-x 3 root root 4096 7月 25 2015 media
drwxr-xr-x 2 root root 4096 4月 11 2014 mnt
drwxr-xr-x 5 root root 4096 4月 23 14:16 opt
dr-xr-xr-x 257 root root 0 10月 9 07:59 proc
drwx------ 15 root root 4096 10月 7 13:36 root
drwxr-xr-x 26 root root 860 10月 9 08:25 run
drwxr-xr-x 2 root root 12288 9月 20 10:06 sbin
drwxr-xr-x 2 root root 4096 2月 19 2015 srv
dr-xr-xr-x 13 root root 0 10月 9 07:59 sys
drwxrwxrwt 8 root root 45056 10月 9 13:17 tmp
drwxr-xr-x 11 root root 4096 10月 22 2015 usr
drwxr-xr-x 14 root root 4096 9月 22 2015 var
lrwxrwxrwx 1 root root 30 7月 13 07:36 vmlinuz -> boot/vmlinuz-3.16.0-76-generic
lrwxrwxrwx 1 root root 30 9月 20 2015 vmlinuz.old -> boot/vmlinuz-3.16.0-49-generic
5.3.3 绝对路径与相对路径
- 两个特殊目录:
.
代表当前目录,也可以用./
表示;..
代表上一层目录,也可以用../
表示。
- 绝对路径:由根目录/开始写起的文件名或目录名,如/home/xiang/.bashrc。
- 相对路径:相对于目前路径的文件名,如./home/xiang或../../home/xiang/。开头不是/就是相对路径。
5.3.4 CentOS的观察
xiang:~ $ uname -r #查看核心版本
3.10.0-229.el7.x86_64
xiang:~ $ uname -m #查看操作系统的位版本
x86_64
5.4 重点回顾
Please indicate the source: http://blog.csdn.net/gaoxiangnumber1
Welcome to my github: https://github.com/gaoxiangnumber1