命令
su -
export LC_ALL=en_US.utf-8
chgrp [-R] 文件/目录
chown [-R] 用户:组 文件/目录
cp 源文件 目标文件
chmod abc 文件/目录
chmod [ugoa][+-=][rwx] 文件/目录
cat 文件名 文件名
uname -a
文件
/etc/locale.conf
修改默认语系
小结
- cp命令会复制执行者的 属性(拥有者和群组)、权限,以及修改modification 时间
- Linux的FHS标准只规定了
/
,/usr
,/var
的结构 - Linux文件和目录的含义
Chap5 Linux 的文件权限与目录配置
5.1 使用者 和 群组
- 账号和群组是 多对多的关系
- 用户是记录在
/etc/passwd
中,密码记录在/etc/shadow
中,群组记录在/etc/group
中
5.2 文件权限的概念
5.2.1 文件属性
ls -al
drwxr-xr-x. 3 root root 17 May 6 00:14 .config <=范例说明处
drwx------. 3 root root 24 May 4 17:59 .dbus
-rw-r--r--. 1 root root 1864 May 4 18:01 initial-setup-ks.cfg <=范例说明处
[ 1 ] [ 2 ][ 3 ][ 4 ][ 5 ][ 6 ] [ 7 ]
[ 权限 ][连结][拥有者][群组][文件容量][ 修改日期 ] [ 檔名 ]
a. 权限
-rwxrwx---
第一个字符代表文件类型:
- d : 目录
- - : 文件
- l : 连接档
- b : 装置文件里面的可供储存的接口设备(可随机存取装置);
- c : 装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
接着三个为一组,分别为 读、写、执行
b. 连接数
每个文件都会把 权限于属性,记录到文件系统的inode中, 这个数字就是标志着这个inode有几个文件名连接到它。
c. 拥有者 和 群组
d. 容量大小,默认单位bytes
e. 创建日期或者最近修改日期
- 默认是 日期+时间, 如果时间太久远,则会变成 日期+年份。
- 使用
ls -l --full-time
来显示完整时间 - 中文显示不对的话记住使用
export LC_ALL=en_US.utf8 # 修改默认语系 在 /etc/locale.conf中
f. 文件名
5.2.2 修改属性和权限
chgrp : 改变所属组
chown : 改变所属用户
chmod: 改变权限,SUID,SGID,SBIT 等等
a. 改变群组 chgrp
chgrp [-R] 目录名/文件名
# -R代表递归修改
要被改变的组名必须要在/etc/group 文件内存在才行
b. 改变拥有者 chown
chwon [-R] 拥有者:组名 文件名/目录名
chwon [-R] 拥有者 文件名/目录名 # 还能顺便更改组名
chwon [-R] 拥有者.组名 文件名/目录名 # 使用 .来分割
chwon [-R] .组名 文件名/目录名 # 只修改组名
更改的用户需要在 /etc/passwd中存在
注意,因为 cp
命令会使用复制 执行者的属性、权限,以及修改 modification time
[root@study ~]# cp .bashrc .bashrc_test
[root@study ~]# ls -al .bashrc*
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
-rw-r--r--. 1 root root 176 Jun 3 00:04 .bashrc_test <==新文件的属性没变
c. 修改权限 chmod
chmod [-R] xyz 文件或目录 # xyz为数字
chmod [-R] [ugoa][+-=][rwx] 文件/目录
# 例子
chmod u=rwx,go=rx .bashrc
5.2.3 文件和目录权限的意义
a. 文件权限意义
- r (read):可读取此一文件的实际内容,如读取文本文件的文字内容等;
- w (write):可以编辑、新增或者是修改该文件的内容(但不含删除该文件);
- x (execute):该文件具有可以被系统执行的权限。
b. 目录权限意义
-
r (read contents in directory):
表示具有读取目录结构列表的权限,所以当你具有读取®一个目录的权限时,表示你可以查询该目录下的文件名数据。 所以你就可以利用 ls 这个指令将该目录的内容列表显示出来! -
w (modify contents of directory):
- 创建文件和目录
- 删除文件和目录
- 改名操作
- 移动操作
-
x (access directory):
目录的 x 代表的是用户能否进入该目录成为工作目录, 也就表示能否执行该目录下的命令。
上面很多情况,dir只要有 x就行了,因为如果知道有什么文件的话,r就不是必须的,但是就没法使用[tab]补全了
5.2.4 Linux文件种类和扩展名
- regular file: 第一个字符是
-
的- 文本文件
- 二进制文件
- 数据格式文件: 比如/var/log/wtmp,使用
last
可以读,但是cat会读出乱码
- 目录
- 连接
- 设备文件:
- block设备:第一个是
b
的,如硬盘,可以随机读取 - character 设备文件:第一个是
c
,串行设备,只能一次性读取
- block设备:第一个是
- socket: 第一个为
s
,网络通信 - 管道文件: 第一个为
p
man fifo 及 man socket 可以查看帮助
a. 文件名长度
-
Ext2/Ext3/Ext4 文件系统以及近来被 CentOS 7 当作预设文件系统的 xfs而言,针对文件的档名长度限制为:
- 单一文件或目录的最大容许文件名为 255bytes,以一个 ASCII 英文占用一个 bytes 来说,则大约可达 255个字符长度。若是以每个中文字占用 2bytes 来说, 最大档名就是大约在 128 个中文字之谱!
5.3 Linux目录配置
5.3.1 Filesystem Hierarchy Standard (FHS)标准
- shareable: 可以分享给其他系统挂载的目录
- unshareable: 不适合分享给其他主机挂载的
- static: 有些数据是不会经常变动的,跟随着 distribution 而不变动。 例如函式库、文件说明文件、系统管理员所管理的主机服务配置文件等等
- variable: 经常改变的数据,例如登录文件、一般用户可自行收受的新闻组等
FHS 针对目录树架构仅定义出三层目录底下应该放置什么数据而已:
- / (root, 根目录):与开机系统有关;
- /usr (unix software resource):与软件安装/执行有关;
- /var (variable):与系统运作过程有关
a. 根目录
FHS标准建议: 根目录(/)所在分区槽应该越小越好, 且应用程序所安装的软件最好不要与根目录放在同一个分区槽内,保持根目录越小越好。 如此不但效能较佳,根目录所在的文件系统也较不容易发生问题。
b. 目录总览
FHS 要求必须要存在的目录 | |
---|---|
/bin | Linux有很多放执行文件的地方,但是 /bin 放置的是在单人维护模式下还能够被操作的指令 |
/boot | 开机会用到的文件,Linux 核心文件以及开机选单与开机所需配置文件等, Linux kernel 常用的档名为: vmlinuz ,如果使用的是 grub2 这个开机管理程序, 则还会存在/boot/grub2/ 这个目录喔 |
/dev | 任何装置与接口设备都是以文件的型态存在于这个目录当中 如 /dev/null, /dev/zero, /dev/tty, /dev/loop*, /dev/sd* |
/etc | 系统主要的配置文件 /etc/opt (必要):这个目录在放置第三方协力软件 /opt 的相关配置文件/etc/X11/ (建议):与 X Window 有关的各种配置文件都在这里,尤其是 xorg.conf 这个 X Server的配置文件 /etc/xml/ (建议):与 XML 格式有关的各项配置文件 |
/lib | 系统的函数库非常多,/lib 放置的则是在开机时会用到的函式库, 以及在/bin 或/sbin 底下的指令会呼叫的函式库而已 |
/media | /media 底下放置的就是可移除的装置啦! 包括软盘、光盘、 DVD |
/mnt | 挂载文件目录 |
/opt | 第三方软件安装目录 |
/run | 统开机后所产生的各项信息应该要放置到 /var/run 下,现在改为/run 目录下 |
/sbin | 设定系统环境的指令,放在/sbin 底下的为开机过程中所需要的,里面包括了开机、修复、还原系统所需要的指令 |
/srv | 一些网络服务启动之后,这些服务所需要取用的数据目录 |
/tmp | 临时文件 |
/usr | 第二层 FHS 设定 |
/var | 第二层 FHS 设定 |
FHS 建议可以存在的目录 | |
---|---|
/home | 家目录 |
/lib64 等 | 用来存放与 /lib 不同的格式的二进制函式库 |
/root | root家目录, 如果进入单人维护模式而仅挂载根目录时, 该目录就能够拥有 root 的家目录,所以我们会希望 root 的家目录与根目录放置在同一个分区槽中 |
建议 | |
---|---|
/lost+found | 使用标准的 ext2/ext3/ext4 文件系统格式才会产生的一个目录,目的在于当文件系统发生错误时, 将一些遗失的片段放置到这个目录下。不过如果使用的是 xfs 文件系统的话,就不会存在这个目录了 |
/proc | 虚拟文件系统,保存在内存中的系统运行状态 |
/sys | 这个目录其实跟/proc 非常类似,也是一个虚拟的文件系统,主要也是记录核心与系统硬件信息较相关的信息。 |
早期 Linux 在设计的时候,若发生问题时,救援模式通常仅挂载根目录而已, 因此有五个重要的目录被要求一定要与根目录放置在一起, 那就是
/etc, /bin, /dev, /lib, /sbin
这五个重要目录。现在许多的 Linux distributions 由于已经将许多非必要的文件移出 /usr 之外了, 所以 /usr 也是越来越精简,同时因为 /usr 被建议为『即使挂载成为只读,系统还是可以正常运作』的模样,所以救援模式也能同时挂载 /usr 喔! 例如我们的这个 CentOS 7.x 版本在救援模式的情况下就是这样。因此那个五大目录的限制已经被打破了呦!例如 CentOS 7.x 就已经将 /sbin, /bin, /lib 通通移动到 /usr 底下了
c. /usr
FHS 要求必须要存在的目录 | |
---|---|
/usr/bin/ | 所有一般用户能够使用的指令都放在这里!目前新的 CentOS 7 已经将全部的用户指令放置于此,而使用连结档的方式将 /bin 连结至此 |
/usr/lib | 与 /lib 功能相同,所以 /lib 就是链接到此目录中的 |
/usr/local | 安装程序目录 |
/usr/sbin/ | 非系统正常运作所需要的系统指令。最常见的就是某些网络服务器软件的服务指令(daemon)啰!不过基本功能与 /sbin 也差不多, 因此目前 /sbin 就是链接到此目录中的 |
/usr/share/ | 主要放置只读架构的数据文件,当然也包括共享文件, 几乎都是文本 |
FHS 建议可以存在的目录 | |
---|---|
/usr/games | 游戏相关 |
/usr/include/ | C/C++ 等语言的 header 和 include存放位置,当我们以 tarball 方式 (*.tar.gz 的方式安装软件)安装某些数据时,会使用到里头的许多包含档 |
/usr/libexec/ | 某些不被一般使用者惯用的执行档或脚本(script)等 |
/usr/lib64/ 等 | 与 /lib64/功能相同,因此目前 /lib64 就是链接到此目录中 |
/usr/src | 一般原始码建议放置到这里 |
d. /var
cache, log, 数据文件等等
FHS 要求必须要存在的目录 | |
---|---|
/var/cache | 程序运行产生的缓存 |
/var/lib | 需要使用到的数据文件放置的目录。在此目录下各自的软件应该要有各自的目录 |
/var/lock | 某些装置或者是文件资源一次只能被一个应用程序所使用,如果同时有两个程序使用该装置时, 就可能产生一些错误的状况,因此就得要将该装置上锁(lock),以确保该装置只会给单一软件所使用。 目前此目录也已经挪到/run/lock 中 |
/var/log | 登录文件放置的目录,非常重要 |
/var/mail | 放置个人电子邮件信箱的目录, 现在也放在了 /var/spool/mail |
/var/run | 某些程序或者是服务启动后,会将他们的 PID 放置在这个目录下喔. 现在也连接到/run 中 |
/var/spool | 这个目录通常放置一些队列数据 ,这些数据被 使用后通常都会被删除 |
比较大的差异在于将许多原本应该要在根目录 (/) 里面的目录,将他内部数据全部挪到 /usr 里面去,然后进行连结设定!包括底下这些
- /bin --> /usr/bin
- /sbin --> /usr/sbin
- /lib --> /usr/lib
- /lib64 --> /usr/lib64
- /var/lock --> /run/lock
- /var/run --> /run
5.3.2 目录树
5.3.3 绝对路径和相对路径
5.3.4 CentOS的系统信息查看
Linux除了 FHS 之外,还有个 Linux Standard Base(LSB) 的标准是可以依循的
uname -r # 查看核心版本
uname -m # 查看操作系统位
yum install redhat-lsb # 安装 lsb_release 来查看 LSB标准信息
lsb_release -a # 查看lsb标准