Linux入门笔记(文件权限与目录配置)

1 Linux 的文件权限

Linux 是一个多人多任务环境,为了使各个用户都具有保密的文件数据,此时文件权限管理就很重要了。Linux 一般将文件的可读写身份分为三个类别,分别是:

  • 拥有者 owner(新增用户的使用的是 useradd 命令,删除用户使用的是 userdel 命令,修改用户信息使用 usermod 命令,查看用户信息使用 id 命令)
  • 所属群组 group(新增用户组使用的是 groupadd 命令,删除用户组使用的是 groupdel 命令,新增用户到用户组可以使用修改用户信息命令的 usermod
  • 其它人 others

而这些身份都各自有 read、写 write、执行 execute 等权限。

默认的情况下,所有系统上的账号与一般身份用户(包括 root)的相关信息都是记录在 /etc/passwd 这个文件内,而个人密码则是记录在 /etc/shadow 这个文件内,而 Linux 所有的组名都记录在 /etc/group

1.1 Linux 文件属性

使用 ls -Al 命令可以显示一系列文件的文件名与相关属性(ls 就是 List 的意思),如:
在这里插入图片描述
如果有文件显示出来就会出现由下图对应的七个文件属性字段:
在这里插入图片描述

1.1.1 文件的类型与权限

文件的类型与权限一共有十个字符:

  • 第一个字符表示的是这个文件的类型:
    • d 时,则表示该文件是目录类型
    • - 时,则表示该文件是文件类型,文件类型又可以分为:
      • 纯文本文件
      • 二进制文件,可执行文件就是这种格式
      • 数据文件,有些程序在运行的过程当中会读取某些特定格式的文件
    • l 时,则表示该文件是链接文件,链接文件就相当于 window 中的快捷方式
    • b 时,则表示为设备文件里面的可供存储的周边设备
    • c 时,则表示为设备文件里面的串行端口设备,如键盘、鼠标
  • 接下来的字符,以三个字符为一组,均为 rwx 的三个参数组合,r 表示可读,w 表示可写,x 表示可操作,如果没有权限就显示 -,而三个字符组依次分别表示:
    • 文件拥有者可具备的权限
    • 此用户组的权限
    • 其它人的权限

值得注意的是,目录与文件的权限意义并不相同,目录的可写权限表示的是可对当前目录中的文件进行增删操作,而文件的可写权限只是对文件有修改的权限并没有删除该文件的权限,而目录的可操作权限则表示可以通过 cd 命令进入该文件目录,可读操作就是可以通过 ls 命令获取目录下所有文件的属性信息

1.2 修改文件属性与权限

1.2.1 身份修改命令

chgrp:修改文件所属用户组,它的语法为:

chgrp [R] dirname/filename

如:chgrp admin /tmp/testing,其中 -R 表示进行递归修改,即连同子目录下的所有文件、目录都更新为这个用户组。

chown:修改文件拥有者,它的语法为:

chown [R] dirname/filename

如:chown admin /tmp/testing

1.3.1 修改权限 chmod

使用 cp 命令复制文件给自身之外的其他人时,如将 .bashrc 这个文件复制成为 .bashrc_test 时,复制操作会同时复制执行者的属性与权限

cp .bashrc .bashrc_test

此时需要修改该文件的拥有者,用户组或修改基础权限了。
Linux 文件的基础权限有9个,分别是拥有者、用户组,其他人三种身份都各有自身的读、写、执行权限。

  • 数字类型修改文件权限

我们可以使用数字来代表各个权限,各权限的对照表如下:

r:4
w:2
x:1

每种身份各自的三个权限的数字是可以叠加,如 rwx 的叠加数字为 7,而设置权限的时候就如下:

chmod 777 fileName

1.3.2 文件的默认权限 umask

在建立一个文件或目录的时候,它的默认权限则与 umask 有关了,基本上,umask 就是指定目前用户在
建立文件或目录时候的权限默认值,可以直接使用 umask 命令或者添加参数 -S 获取 umask 数值,如:

[root@study ~]# umask
0022
[root@study ~]# umask -S
u=rwx,g=rx,o=rx

上述例子的数字类型权限设置值为 0022,其中第一组为特殊权限,后三组就是上文提到过权限组。要注意的是 umask 的数字指的是 该默认值需要减掉的权限,即由于 rwx 分别是 421,当权限为 rw 时,减掉的数值就该是 x 的数值 1
同时,在默认权限的属性上,目录与文件是不一样的,默认情况下:

  • 若用户创建为文件则 默认没有可执行 x 权限,因此如果全为 rw ,此时 umask 的数值为 000(无需减掉 x 权限数值)
  • 若用户建立为目录则默认为所欲权限均开放,即 umask 的数值为 000

想要修改 umask 数值可以直接在使用 umask 命令紧接数字类型的权限设置值,如:

umask 002

1.3.3 文件特殊权限

有时候在查看一些文件权限值的时候,可能会意外发现除了 rwx 外,还存有其它特殊的权限值 st,这两个特殊的字母的意义与系统的账号以及系统的进程管理有关。这两个字母出现的位置不同,代表的意义都不同。

1.3.3.1 Set UID

s 标志出现在文件拥有者的 x 权限上时,如 -rwsr-xr-x ,此时就称为 Set UID,简称 SUID,基本上 SUID 有以下限制与功能:

  • SUID 权限仅对二进制程序有效
  • 执行者对于该程序需要有 x 的可执行权限
  • 本权限仅在执行该程序的过程中有效
  • 执行者将具有该程序拥有者(owner)的权限

举例子,passwd 命令的权限就是 -rwsr-xr-x,在 Linux 中所有的账号密码都记录在 /etc/shadow 这个文件上,该文件的权限为仅有 root 可读且仅有 root 可以强制写入,但个体用户却可以使用 passwd 命令修改自己的密码,这是因为:

  • 个体用户对 /usr/bin/passwd 这个程序具有 x 的权限
  • /usr/bin/passwd 的拥有者是 root
  • 当个体用户执行 passwd 的过程中,会暂时获取 root 的权限
  • /etc/shadow 此时就可以被个体用户所执行的 passwd 命令所修改
1.3.3.2 Set GID

与 SUID 类似,不过 SGID 针对的是文件或目录设置的,即:

  • SGID 权限仅对二进制程序有效
  • 执行者对于该程序需要有 x 的可执行权限
  • 执行者在执行的过程中将会获得该程序用户组的支持
1.3.3.3 Sticky Bit

SBIT 只针对目录有效,它的作用是:

  • 当用户对此目录具有 wx 权限,即具有写入的权限;
  • 当用户在该目录下建立文件或目录时,仅有自己与 root 才有权力删除该文件

1.3.4 文件的隐藏属性

文件的隐藏属性对系统安全上面有着非常重要的作用,在 ext2ext3ext4 的 Linux 传统文件系统上可以使用 chattr 命令来为文件添加一些隐藏属性,chattr 语法如下

chattr [+-=] [ASacdistu] 文件或目录名称

以下主要是一些常用的选项与参数:

  • +:增加某一个特殊参数,其它原本存在的参数保持不变
  • -:删除某一个特殊参数,其它原本存在的参数保持不变
  • =:直接设置参数,其它原本存在的参数会被覆盖
  • A:当设置了这个属性值,它的存取时间 atime 将不会应存取这个文件或目录而修改
  • S:一般的文件都是非同步地写入磁盘的,当设置该属性,当进行文件修改的时候,该修改会同步写入磁盘
  • a:当设置了这个属性值,该文件就只能增加数据,而不能删除和修改数据
  • c:当 dump 程序被执行的时候,设置 d 属性可让文件或目录不被 dump 备份
  • i:当设置了这个属性值,该文件就不能被删除、改名、设置链接、也无法写入或新增数据
  • s:当设置了这个属性值,此时该文件被删除,就将完全从硬盘中删除,无法恢复
  • u:与 s 相反,删除后可以恢复该文件

使用 lsattr 命令可以显示文件的隐藏属性,语法如下:

lsattr [-adR] 文件或目录名称

以下主要是一些常用的选项与参数:

  • -a:将隐藏文件的属性也显示出来
  • -d:如果接的目录,仅列出目录本身的属性而非目录内的文件名
  • -R:连同子目录的数据也一并显示出来

2 Linux 目录配置

FHS(FileSystem Hierarchy Standard)标准,它的目的是希望让用户可以了解到已安装软件通常放置在哪个目录下。FHS 依据文件系统使用的频繁与否是否允许用户随意修改,而将目录定义为四种交互作用的形态,用表格表示:

可分享不可分享
不变/usr (软件存放处)/etc(配置文件)
/opt(第三方辅助文件)/boot(启动与内核文件)
可变/var/mail(用户邮箱)/var/run(程序相关)
/var/spool/news(新闻组)/var/lock(程序相关)

以下是一些我觉得需要记录一下根目录底下的目录类型

  • /bin:放置的是在的人维护模式下还能够被使用的命令(能被 root 与一般账号所使用)
  • /dev:任何设备与接口设备都是以文件的形式存放在这个目录当中
  • /lib:放置的是启动是会用到的函数库,以及在 /bin/sbin 下面的命令会调用的函数库
  • /media:放置的是可删除的设备如软盘,光盘等

2.1 $PATH 环境变量

如同 window 一样,Linux 都有一个环境变量 $PATH,使用以下命令可以打印出环境变量的路径,其中不同的路径会使用 : 分隔开,值得注意的是不同的用户的 $PATH 变量都是不同的

echo $PATH

而想要添加环境变量,比如添加 /root 到环境变量,就可以使用以下命令:

PATH="${PATH}:/root"

3 目录管理

在接触目录的相关操作之前,需要先了解一下比较特殊的目录:

  • .:代表此层目录
  • ..:代表上一层目录
  • -:代表前一个工作目录
  • ~:代表目前使用者身份所在的家目录
  • ~account:代表 account 这个使用者的家目录

下面就是几个常用的处理目录的命令:

  • cd(Change Directory):切换目录
  • pwd(Print Working Directory):显示当前目录
  • mkdir:建立一个新目录
  • rmdir:删除一个 目录

其实觉得只要会用了 man 以及 --help,具体的用法都可以不用记牢,所以以下对一些命令参数做一下提醒。

3.1 mkdir

创建新目录的命令语法如下:

mkdir [-mp] 目录名称
  • -m:设置文件的权限,不使用默认权限,如:mkdir -m 711 test2
  • -p:创建目录递归创建,如:mkdir -p test1/test2/test3,同样删除目录的时候,使用 -p 也是相同效果

3.2 ls

ls 命令用于显示当前目录内的文件和目录的详情,具体语法是:

ls [-aAdfFhilnrRSt] 文件名或目录名称
ls [--color={never,auto,always}] 文件名或目录名称
ls [--full-time] 文件名或目录名称

以下主要是一些常用的选项与参数:

  • -a:显示全部文件,连同隐藏文件
  • -A:显示全部文件,连同隐藏文件,但不包括 ... 这两个目录
  • -d:仅显示目录本身,不显示目录内的文件
  • -l:详细信息显示,包含文件的属性与权限等数据
  • --full-time:输出完整时间模式
  • --color={never,auto,always}:显示颜色

4 文件管理

4.1 cp

要复制文件就使用 cp(copy)命令,除了单纯地复制之外,它还可以建立链接文件,对比两文件的新旧而予以更新,以及复制整个目录等功能,语法:

cp [-adfilprsu] 源文件 目标文件
cp [options] source1 source2 source3...

以下主要是一些常用的选项与参数:

  • -a:相当于 -dr --preserve=all 的意思
  • -d:若源文件为链接文件,则复制链接文件属性而非文件本身
  • -i:若目标文件已存在是,在覆盖是先询问用户
  • -p:连同文件的属性一起复制过去,而非使用默认属性值
  • -r:递归复制,用于目录的复制操作
  • --preserve=all:除了 -p 的权限参数外、还添加 SELinux 属性,links、xattr 等都复制

4.2 rm

rm 命令用于删除文件或目录,具体语法:

rm [-fir] 文件或目录
  • -f:忽略不存在的文件
  • -i:交互模式,删除前会询问用户
  • -r:递归删除

4.3 mv

移动文件与目录或重命名,具体语法:

mv [-fiu] source destination
mv [options] source1 source2.... directory
  • -f:如果目录文件已经存在,不会询问而直接覆盖
  • -i:交互模式
  • -u:若目标文件已经存在,而 source 比较新,才会进行更新

mv 命令重命名的方式很简单,如下就实现了重命名功能了:

mv testing1 testing2

4.4 获取路径地文件名称与目录名称

每个文件的完整文件名都包含了前面的目录与最终的文件名,而每个文件名的长度都可以到达 255 个字符。使用 basename 能获取到文件名,而使用 dirname 能获取到目录名,如:

[admin@localhost /]$ basename /tmp/testing
testing
[admin@localhost /]$ dirname /tmp/testing
/tmp

4.5 文件内容查看

如果需要查看一个文件的内容,可以使用以下这些命令:

  • cat:由第一行开始显示文件内容
  • tac:从最后一行开始显示
  • nl:显示的时候同时输出行号
  • more:一页一页地显示文件内容
  • less:与 more 类似,但可以往前翻页
  • head:只看前面的几行
  • tail:只看后面的几行
  • od:以二进制的方式读取文件内容

4.5.1 cat

cat 其实是英文 Conactenate 的缩写,主要是将一个文件的内容连续打印到屏幕上面,它的具体语法:

cat [-AbEnTv]

以下主要是一些常用的选项与参数:

  • -b:列出行号,仅针对非空白行做行号显示、空白行不标行号
  • -n:列出行号,连空白行都做行号显示
  • -A:列出一些看不出的特殊字符,将 [tab] 键以 ^I 显示出来,结尾的换行符以 $ 显示出来

4.5.2 more

有时候当你的文件内容行数超过40行以上,或许就根本来不及看屏幕上的内容了,此时就需要使用到 moreless 命令进行翻页查询的工作了。
more 命令使用后,你有几个按键可以使用(其实跟使用了 man 命令时差不多):

  • 空格键:代表向下翻一页
  • Enter:代表向下翻一行
  • b:代表往回翻页
  • /字符串:查找关键字,输入后按回车,想要重复查找同一个字符串,可以直接按下 n 即可
  • :f:显示文件名以及目前显示的行数
  • q:代表离开

4.5.3 less

less 命令与 more 命令功能类似,less 命令使用后,你可以使用以下几个按键:

  • 空格键:向下翻动一页
  • [pagedown]:向下翻动一页
  • [pageup]:向上翻动一页
  • /字符串:向下查找字符串的功能
  • ?字符串:向上查找字符串的功能呢
  • n:重复前一个关键字查找
  • N:反向重复前一个关键字查找
  • g:前进到这个数据的第一行
  • G:前进到这个数据的最后一行
  • q:离开

4.6 修改文件时间或创建新文件

touch 命令可以创建一个空的文件,语法是:touch fileName,如:

touch testtouch

touch 命令还能修改原有的文件时间,当使用 ls -l 命令附加 --time 参数的时候,赋值的类型不同,可以获取三个主要变动的时间,分别是

  • 修改时间(modification time):默认地不添加 --time 参数的时候,输出打印的就是修改时间,当该文件的内容数据变更的时候就会更新该事件,内容数据指的是文件内容,而不是文件的属性或权限
  • 状态时间(status time):使用 --time=ctime 参数的时候,输出打印的就是状态时间,当文件的状态改变的时候,就会更新该时间,如修改权限与属性
  • 读取时间(access time):使用 --time=atime 参数的时候,就会更新这个读取时间,比如使用了 cat 命令读取了该文件

此时想要变更时间就可以使用到 touch 命令,语法如下:

touch [-acdmt] fileName

以下主要是一些常用的选项与参数:

  • -a:修改了状态时间和读取时间,定义的时间为当前时间
  • -c:修改文件的时间(就是上述的三个时间),若该文件不存在则不建立新文件
  • -d:后面可以接自定义的时间而不是默认的当前时间,此时定义的是修改时间以及读取时间
  • -m:仅定义修改时间(modificationn time)
  • -t:后面可以自定的时间而不是默认的当前时间,格式为[YYYYMMDDhhmm],此时定义的是修改时间以及读取时间

4.7 命令与文件的查找

4.7.1 脚本文件的查找

查找命令的完整文件名可以使用 whichtype 命令进行查找,如使用 which 命令查找执行文件,语法如下:

which [a] command

以下主要是一些常用的选项与参数:

  • -a:将所有由 PATH 目录中可以找到的命令均列出,而不止第一个被找到的命令名称

需要注意的是,which 命令是根据 PATH 这个环境变量所规范的路径,去查找执行文件的文件名,而比如 history 这种 bash 内置的命令,which 命令是无法查找得到的。此时就需要使用到 type 命令了。

4.7.2 文件的查找

文件的查找命令常用的有三个,分别是 whereislocatefind。通常 find 不是很常用,因为除了速度慢之外,也很影响硬盘的性能,一般的,我们会使用 whereislocate 命令。
因为 whereis 命令只找系统中某些特定目录下面的文件而已,而 locate 则是利用数据库来查找文件名,并且没有实际查找硬盘内的文件系统状态,所以比较省时间。
whereis 命令的语法如下:

whereis [-bmsu] 文件或目录名

以下主要是一些常用的选项与参数:

  • -l:列出 whereis 会去查找的几个主要目录
  • -b:只找 binary (二进制)格式的文件
  • -m:只找在说明文件 manual 路径下的文件
  • -s:只找 source 源文件
  • -u:查找不在上述三个项目当中的其他特殊文件

locate 命令来寻找数据特别快,这是因为它寻找的数据是由已建立的数据库 /var/lib/mlocate/ 里面的数据所查找的,而不是直接在硬盘当中读取数据,它的语法如下:

locate [-iclSr] keyword

keyword 就是模糊查找,即使用部分文件名即可,以下主要是一些常用的选项与参数:

  • -i:忽略大小写差异
  • -c:不输出文件名,仅计算找到的文件数量
  • -l:仅输出几行的意思,例如输出五行则是 -l 5
  • -S:输出 locate 所使用的数据库文件的相关信息,包括该数据库记录的文件/目录数量等
  • -r:后面可以接正则表达式的显示方式

正常情况下,CentOS 7.x 是每天会更新数据库一次,所以如果刚新建起来的文件,马上使用 locate 命令查找会显示查询不到,此时可以使用 updatedb 命令强制更新数据库。
find 命令的语法如下:

find [PATH] [option] [action]

PATH:顾名思义就是要查找的路径,以下主要是一些常用的选项与参数:

  • -mtime nn 为数字,意思为在 n 天之前的一天之内被修改过的内容的文件
  • -mtime +n:列出在 n 天之前(不包含 n 天本身)被修改过内容的文件
  • -mtime -n:列出在 n 天之内(含 n 天本身)被修改过内容的文件
  • -newer filefile 为一个存在的文件,列出比 file 还要新的文件
  • -uid nn 为数字,这个数字是使用者的 ID,即 UID,这个 UID 记录在 /etc/passwd 里面
  • -gid nn 为数字,这个数字是用户组名称的 ID,即 GID,这个 GID 记录在 /etc/group 里面
  • -user namename 为使用者账号名称
  • -group namename 为使用组名称
  • -nouser:查找文件的拥有者不在 /etc/passwd 文件中,比如查找一些由网络下载而来的文件
  • -nogroup:查找文件的拥有组别不在 /etc/group 文件中,比如查找一些由网络下载而来的文件
  • -name filename:查找名为 filename 的文件
  • -size [+-] SIZE:查找比 SIZE 还要大 + 或 小 - 的文件,这个 SIZE 的规格有:c 代表 Bytes,k 代表 1024 Bytes,所以要找比 50KB 大的文件,可以使用 -size +50k
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值