用户与用户组
- linux用户身份与用户组记录的文件
在我们linux系统中,默认的情况下所有系统上的账号与一般身份用户,还有root的相关信息,都是记录在/etc/passwd这个文件内。至于个人的密码则是记录在/etc/shadow这个文件下面。linux所有的组员都记录在/etc/group内。
linux文件权限概念
ls -al可以查看文件的具体信息,包括权限
分别代表的意思是文件权限,连接数,文件所有者,文件所属用户组,文件大小(单位为B),文件最后被修改的时间,文件名
第一个字符代表这个文件是目录,文件或者链接文件等
- 若是【d】则是目录
- 若是【-】则是文件
- 若是【|】则表示为连接文件
- 若是【b】则是设备文件里面的可供存储的接口设备
- 若是【c】则表示设备文件里面的串口端口设备
接下来的字符中,三个为一组,r表示可读,w表示可写,x表示可以执行
- 第一组为文件所有者的权限
- 第二组为同用户组的权限
- 第三组表示其他用户的权限
第二列的数字表示多少文件名连接到此节点
每个文件都会将它的权限和属性记录到文件系统的i-node中,不过我们使用的目录树却是使用文件名来记录,因此每个文件名都会连接到一个i-node。这个属性记录的就是有多少不同的文件名连接到相同的一个i-node号码。
如果想让系统默认的语言变成英语的话,就修改系统配置文件/etc/sysconfig/i18n
第七列就是该文件名
如果文件名之前多了“.”,就代表这个文件为隐藏文件
例如
drwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 groups/
表示文件所有制可以在本目录进行任何工作
testgroup这个用户组可以进入本目录工作,但是不能在本目录进行写入操作
others虽然有r的权限,但是没有x的权限,所以无法进入本目录
-
接下来是几个常用于用户组、所有者、各种身份的权限的修改的命令
chgrp:改变文件所属用户组
chown:改变文件所有者
chmod:改变文件的权限 -
chgrp是change group的简称。但是要被改变的组名必须要在/etc/group文件内存在才行,否则就会显示错误
-
改变文件所有者:chown
改变的所有者必须是已经存在于系统中的账号,就是在/etc/passwd这个文件中有记录才行
chown可以顺便直接修改用户组的名称。如果连目录下面的所有子目录或文件都需要同事改变文件所有者的话,需要加上-R的参数
例子:
chown bin install.log 将install.log的文件所有者改为bin
chown root:root install.log 将这个文件的所有者和所有组都改为root
cp命令
cp 源文件 目标文件
但是cp会复制执行者的谁能够和权限,就需要修改文件的所有组和所有者
chmod命令,改变权限
- 数字改变权限
上文讲到9个权限是3个为一组的。其中,我们可以使用数字来代表各个权限
r:4
w:2
x:1
每种身份各自的三个权限分数是需要累加的,例如-rwxrwx—,就是770
chmod的语法:chmod [-R] 数字 文件或目录
chomd 777 .bashrc
- 符号改变类型
- 我们通过u,g,o来代表三种身份的权限,其中a代表all,就是全部的身份。读写的权限写成r,w,x
例如
chmod u=rwx,go=rx .bashro
如果只是想增加文件的每个人均可写入的权限呢
chmod a+w .bashrc
- 权限对文件的重要性
read:可读取文件的实际内容
write:可以编辑、新增或是修改文件的内容
execute:该文件具有被系统执行的权限
关于x,我们必须要小心。在Windows下面,一个文件是否具有执行的能力是通过扩展名来判断的。但是在linux下面,我们的文件是否被执行是由x这个权限来决定的
w:是指的具有写入、编辑、新增、修改文件的内容的权限,但是没有删除的权限
- 权限对目录的重要性
文件是存放实际数据的所在,目录主要的内容是记录文件名列表,文件名与目录由强烈的关联
r:表示可以查询该目录下面的文件名数据
w:表示可以更改目录结构列表的权限
就是新增新的文件和目录
删除已经存在的文件和目录
将已经存在的文件和目录进行重命名
转移该目录内的文件、目录位置
x:代表用户是否进入该目录成为工作目录的用途,就是CD的权限
没有x的权限是无法进入目录的
实战:
例子证明有r的权限可以查询文件名,但是没有X,有一堆问号
因为不具有x,没有进入的权限
有r的权限可以读取目录的文件名列表,但是详细的信息还是读不到的,同时也不能是的变成工作目录。
x在目录中只是和能否进入该目录有关系,但是w的权限更大,它可以让用户删除、更新、新建文件或目录
linux文件种类与扩展名
文件种类
- 普通文件
- 纯文本文件(ASC码的)
- 二进制文件
- 数据格式文件:有些程序在运行的过程中会读取某些特定格式的文件,那些特定格式的文件被称为数据文件。举例来说,我们的linux在用户登录的时候,都会讲登录的数据记录在/var/log/wtemp那个文件内,该文件是一个data file,它能够通过last这个命令读出来。
- 目录
第一个属性是d - 链接文件
就是类似于win系统下面的快捷方式,第一个属性是[l] - 设备与设备文件
与系统外设及存储等相关的文件,通常几种在/dev这个目录中。
- 块设备文件
就是一些存储数据,一提供系统随机访问的接口设备,例如硬盘、软盘等。可以随机地在硬盘的不同块读写,就是成组设备 - 字符设备文件:
就是一些串行端口的接口设备,例如键盘、鼠标等。特征就是一次性读取的,不能过截断输出的。比如,你不可能让鼠标跳到另一个界面而是滑动到另一个界面
-
套接字
既然被称为数据接口文件,这种类型的文件通常就被用在网络上的数据连接,我们可以启动一个程序来监听客户端的请求,而客户端就可以通过这个socket来进行数据通信。第一个属性为[s],通常在/var/run这个目录中可以看到这种文件类型 -
管道(FIFO,pipe)
-
FIFO也是一种特殊的文件类型,主要的目的是解决多个程序同时访问一个文件所造成的错误问题。FIFO是first-in-first-out的缩写,第一个属性是[p]
linux文件扩展名
基本上linux的文件是没有所谓的扩展名的,因为一个linux文件能不能被执行,和它的第一列的10个属性有关
但是我们还是希望通过扩展名来了解文件是什么东西
*.sh:脚本或批处理文件
Z,tar,tar.gz,zip,tgz:经过打包的压缩文件
html,php:网页相关文件。http文件可以使用玩网页浏览器来直接开启,php文件需要通过客户端的浏览器来服务端浏览,以得到运算后的网页结果
linux文件长度限制
- 在linux下面,使用默认的Ext2/Ext3文件系统的时候,针对问价你的文件名长度限制为:
单一文件或者目录的最大容许文件名为255个字符
包含完整路径名称以及目录(/)的完整文件名为4096个字符
6.3.1 linux目录配置
因为利用Linux来开发产品或distributions的社群/公司与个人实在太多了, 如果每个人都用自己的想法来配置档案放置的目录,那么将可能造成徆很多管理上的困扰。 你能想象,你进入一个企业之后,所接触到的Linux目录配置方法竟然跟你以前学的完全不同吗? 很难想象吧~所以,后来就有所谓的Filesystem Hierarchy Standard (FHS)标准的出炉了!
-
可分享的:
可以分享给其他系统挂载使用的目录,所以包括执行文件与用户的邮件等数据, 是能够分享给网络上其他主机挂载用的目录; -
不可分享的:
自己机器上面运作的装置档案或者是与程序有关的socket档案等, 由于仅与自身机器有关,所以当然就不适合分享给其他主机了。 -
不变的:
有些数据是不会经常变动的,跟随着distribution而不变动。 例如函式库、文件说明文件、系统管理员所管理的主机服务配置文件等等; -
可变动的:
经常改变的数据,例如登录文件、一般用户可自行收受的新闻组等。事实上,FHS针对目录树架构仅定义出三层目录底下应该放置什么数据而已,分别是底下这三个目录的定义:
-
/ (root, 根目彔):与开机系统有关;
-
/usr (unix software resource):与软件安装/执行有关;
-
/var (variable):与系统运作过程有关。
根目录的意义与内容
根目录是整个系统中最重要的一个目录,因为所有的目录都是从根目录衍生出来的,而且根目录也和开机、还原、系统修复等操作有关。由于系统开机的时候需要特定的开机软件、内核文件、开机所需程序、函数库等文件数据。
在FHS的要求方面,他希望根目录不要放在非常大的分割槽内, 因为越大的分割槽妳会放入越多的数据,如此一来根目录所在分割槽就可能会有较多发生错误的机会。
因此FHS标准建议:根目录(/)所在分割槽应该越小越好, 且应用程序所安装的软件最好不要与根目录放在同一个分割槽内,保持根目录越小越好。 如此不但效能较佳,根目录所在的文件系统也较不容易发生问题。
FHS定义出根目录(/)底下应该要有底下这些次目录的存在才好:
上面列举的是针对根目录所定义的标准。。下面是几个在linux当中也是非常重要的目录
除了这些目录的内容之外,另外要注意的是,因为根目录与开机有关,开机过程中仅有根目录会被挂载, 其他分割槽则是在开机完成之后才会持续的进行挂载的行为。就是因为如此,因此根目录下与开机过程有关的目录, 就不能够与根目录放到不同的分割槽去!那哪些目录不可与根目彔分开呢?有底下这些:
/etc:配置文件
/bin:重要执行档
/dev:所需要的装置档案
/lib:执行档所需的函式库与核心所需的模块
/sbin:重要的系统执行文件
除了这些目录的内容之外,另外要注意的是,因为根目录与开机有关,开机过程中仅有根目录会被挂载, 其他分割槽则是在开机完成之后才会持续的进行挂载的行为。就是因为如此,因此根目录下与开机过程有关的目录, 就不能够与根目录放到不同的分割槽去!那哪些目录不可与根目彔分开呢?有底下这些:
/etc:配置文件
/bin:重要执行档
/dev:所需要的装置档案
/lib:执行档所需的函式库与核心所需的模块
/sbin:重要的系统执行文件
/usr的意义与内容
依据FHS的基本定义,/usr里面放置的数据属于可分享的与不可变动的(shareable, static),
很多读者都会误会/usr为user的缩写,其实usr是Unix Software Resource的缩写, 也就是『Unix操作系统软件资源』所放置的目录,而不是用户的数据啦!这点要注意。 FHS建议所有软件开发者,应该将他们的数据合理的分别放置到这个目录下的次目录,而不要自行建立该软件自己独立的目录。
一般来说,/usr的次目录建议有底下这些:
/var的意义与内容
目录树
这个目录树有什么特性呢?他主要的特性有:
- 目录树的启始点为根目彔 (/, root);
- 每一个目录不止能使用本地端的 partition 的文件系统,也可以使用网络上的 filesystem 。举例来说, 可以利用 Network File System (NFS) 服务器挂载某特定目录等。
- 每一个档案在此目录树中的文件名(包括完整路径)都是独一无二的。
来看看根目录底下会有什么样子的数据吧!我们可以下达以下的指令来查询:
绝对路径与相对路径
- 绝对路径:由根目录(/)开始写起的文件名或目录名称, 例如 /home/dmtsai/.bashrc;
- 相对路径:相对于目前路径的文件名写法。 例如 ./home/dmtsai 或 …/…/home/dmtsai/ 等等。反正开头不是 / 就属于相对路径的写法
特别注意这两个特殊的目录:
- . :代表当前的目录,也可以使用 ./ 来表示;
- … :代表上一层目录,也可以 …/ 来代表。