Linux命令行——文件管理与权限

Linux文件管理

1.Linux文件系统结构
Linux文件系统以根目录“/”开始,根目录下包含目录或文件,每一个目录下都可以包含任意数量的目录和文件,如此形成了Linux的文件系统结构。

2.Linux文件查询
Linux命令行模式下输入“ls”查询目录下文件,可以现实目录下包含的目录及文件。如果需要查看目录下更加详细的信息,则需要用“ls -l”进行查询,则显示所属目录及文件的权限、属主、属组和修改时间。如想查看某个目录或文件的具体信息,使用“stat 【文件或目录名】”可以显示其包括大小、修改时间等详细信息。在使用”ls -l”查询文件时,文件信息中第一个字符代表文件类型。具体如下:
-普通文件(文本文件,二进制文件,压缩文件,电影,图片。。。)
d 目录文件(蓝色)
b 设备文件(块设备)存储设备硬盘,U盘 /dev/sda, /dev/sda1
c 设备文件(字符设备)打印机,终端 /dev/tty1
s 套接字文件
p 管道文件
l 链接文件(淡蓝色)
或使用“file 【文件名】”查询文件类型。

3.Linux文件管理
在Linux中,文件命名长度不能超过255个字符,不能使用“/”作文件名,以“."开头的文件为隐藏文件,文件名严格区分大小写。每一个文件的绝对目录从根目录开始,如:/home/text/file1。相对目录则从当前目录开始,假设当前目录为/home,则相对目录为:/text/file2。
文件移动:通过“cd”命令我们可以切换所在目录,格式为:“cd 【绝对路径/相对路径】”。使用“cd -”命令可以让我们返回上次所在目录,只输入“cd”则直接回到初始目录。
创建文件:通过“touch”命令我们可以创建一个或多个文件,格式为:“touch 【文件名】”,则在当前目录下创建一个文件,也可加上文件的目录进行创建,所在文件则在输入的目录下创建。若想同时创建多个文件,那么可使用“{}”将多个文件名写入,每个文件名之间用“,”分隔,如:cd {file1,file2,file3},也可用“ ”分隔文件名。
创建目录:通过“mkdir”命令我们可以创建一个或多个目录,格式为:“mkdir 【目录名】”,则在当前目录下创建一个新目录,当创建多个或多级目录时,我们可以采用和创建文件同样的格式,如:“mkdir {home1,home2/{dir1,dir2,dir3},home3}”,每个“,”分隔的目录为同级目录,在“/”后为其子目录。
复制文件:通过“cp”命令我们可以复制文件,格式为:“cp 【文件名】 【目录名】”,我们可以将一个文件复制到目标目录,复制多个文件时,则可以采用和上面创建目录相同的方法。
移动文件:通过“mv”命令我们可以移动文件到其他目录,格式为:“mv 【文件名】 【目录名】”,文件移动时可以修改文件名,假设所移动文件名为file1,若移动后需要更改文件名,则应在目标目录后加上文件名,如:“mv file1 /home/text/file2”,此时file1被移动到text目录下且被更名为file2。通过“mv”命令我们也可以在当前目录下将文件改名,此时不需要输入目录名,如:“mv file1 file2”,此时文件file1被更名为file2。移动多个文件或目录时,采用和上面相同的方法。
删除文件:通过“rm”命令我们可以删除文件或目录,格式为:“rm 【文件名】”,在删除目录时,我们需要在rm和目录名中间加上-r,如:“rm -r 【目录名】”,系统在此后会询问是否删除,输入“y”则进行删除,输入“n”则取消删除命令。如果加上在rm后加上“-f”则进行强制删除,不会询问。在删除多个文件或目录时,我们可以采取和上面相同的方法,当需要删除某一些文件名相似的文件时,我们可以采用“【相同部分文件名】”的方法删除类似的所有文件,如:“rm -rf file*”,可以删除文件名以file开头的所有文件,只输入“*”则删除目录下所有文件。使用-v可以看见详细过程。
查看文件内容:我们可以使用如下命令查看文件内容:
cat 由第一行开始显示内容,并将所有内容输出
tac 从最后一行倒序显示内容,并将所有内容输出
more 根据窗口大小,一页一页的现实文件内容
less 和more类似,但其优点可以往前翻页,而且进行可以搜索字符
head 只显示头几行
tail 只显示最后几行
nl 类似于cat -n,显示时输出行号
tailf 类似于tail -f
grep 根据文件内容进行查找
修改文件内容
文件编辑器:gredit,vi,vim,nano

4.Linux链接
Linux中有硬链接和软链接两种,使用命令“ln”进行链接,默认情况下,只使用“ln”建立链接产生硬链接。
硬链接:硬链接指通过索引节点来进行连接。在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在 Linux 中,多个文件名指向同一索引节点是存在的。比如:A 是 B 的硬链接(A 和 B 都是文件名),则 A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号相同,即一个 inode 节点对应两个不同的文件名,两个文件名指向同一个文件,A 和 B 对文件系统来说是完全平等的。删除其中任何一个都不会影响另外一个的访问。 硬链接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。
创建一个硬链接:ln f1 f2。(创建一个f1的硬链接文件f2)
软链接
另外一种连接称之为符号连接(Symbolic Link),也叫软链接。软链接文件有类似于 Windows 的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。比如:A 是 B 的软链接(A 和 B 都是文件名),A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号不相同,A 和 B 指向的是两个不同的 inode,继而指向两块不同的数据块。但是 A 的数据块中存放的只是 B 的路径名(可以根据这个找到 B 的目录项)。A 和 B 之间是“主从”关系,如果 B 被删除了,A 仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。
创建一个软链接:ln -s f1 f3。(创建一个f1的软链接文件f3)

Linux权限管理
1.基本权限UGO
权限对象:
U:属主
G:属组
O:其他人
权限类型:
读(r):4
写(w):2
执行(x):1
设置权限:
1. 更改文件的属主、属组
chown:

[root@localhost ~]# chown alice.hr file1 //改属主、属组 
[root@localhost ~]# chown alice file1 //只改属主 
[root@localhost ~]# chown .hr file1 //只改属组 

chgrp:

[root@localhost ~]# chgrp it file1 //改文件属组 
[root@localhost ~]# chgrp -R it dir1 //递归改文件属组 

2. 更改权限
方法a:使用符号
格式:【对象】 【赋值符】 【权限类型】如:
u + r (属主增加读权限)
chmod g - w file1 (属组去除写权限)
o = x (其他人只有执行权限)
a(a代表所有人的权限,给a设置权限相当于给UGO都设置权限)

[root@localhost ~]# chmod u+x file1   //属主增加执行 
[root@localhost ~]# chmod a=rwx file1  //所有人等于读写执行 
[root@localhost ~]# chmod a=- file1   //所有人没有权限 
[root@localhost ~]# chmod ug=rw,o=r file1 //属主属组等于读写,其他人只读 

方法b:使用数字

[root@localhost ~]# chmod 644 file1 
[root@localhost ~]# ll file1 
-rw-r--r-- 1 alice it 17 10-25 16:45 file1 

权限对文件和目录的意义:
文件:
r:可获取文件的数据;
w: 可修改文件的数据;
x:可将此文件运行为进程;
目录:
r:可使用 ls命令获取其下的所有文件列表;
w: 可修改此目录下的文件列表;即创建或删除文件;
x: 可 cd至此目录中,且可使用 ls -l来获取所有文件的详细属性信息;

2.基本权限ACL
setfacl命令用于管理文件的 ACL规则,格式为“setfacl [参数] 文件名称”。文件的 ACL提供的是在所有者、所属组、其他人的读/写/执行权限之外的特殊权限控制,使用 setfacl命令可以针对单一用户或用户组、单一文件或目录来进行读/写/执行权限的控制。
UGO设置基本权限: 只能一个用户,一个组和其他人
ACL 设置基本权限: r,w,x

ACL基本用法:
设置:

 [root@localhost ~]# touch /home/test.txt 
[root@localhost ~]# ll /home/test.txt 
-rw-r--r-- 1 root root 0 10-26 13:59 /home/test.txt 
 
[root@localhost ~]# getfacl /home/test.txt 
[root@localhost ~]# setfacl -m u:alice:rw /home/test.txt //增加用户 alice权限 
[root@localhost ~]# setfacl -m u:jack:- /home/test.txt //增加用户 jack权限 
[root@localhost ~]# setfacl -m o::rw /home/test.txt

查看/删除:

[root@localhost ~]# ll /home/test.txt 
-rw-rw-r--+ 1 root root 0 10-26 13:59 /home/test.txt 
[root@localhost ~]# getfacl /home/test.txt
[root@localhost ~]# setfacl -m g:hr:r /home/test.txt 
[root@localhost ~]# setfacl -x g:hr /home/test.txt //删除组 hr的 acl权限 
[root@localhost ~]# setfacl -b /home/test.txt //删除所有 acl权限 

ACL高级用法:
mask:
用于临时降低用户或组(除属主和其他人)的权限
建议:为了方便管理文件权限,其他人的权限置为空

[root@localhost ~]# setfacl -m m::--- /home/file100.txt

default: 继承(默认)
要求: 希望 alice能够对/home以及以后在/home下新建的文件有读、写、执行权限

思路:
步骤一: 赋予 alice对/home读、写、执行权限 [root@localhost ~]# setfacl -m u:alice:rwx /home

步骤二: 赋予 alice对以后在/home下新建的文件有读、写、执行权限 (使alice的权限继承)

[root@localhost ~]# setfacl -m d:u:alice:rwx /home

3.进程掩码mask umask
新建文件、目录的默认权限会受到 umask的影响,umask表示要减掉的权限 。
修改 shell umask值(临时)

[root@localhost ~]# umask 000 
[root@localhost ~]# mkdir dir900 
[root@localhost ~]# touch file900 
[root@localhost ~]# ll -d dir900 file900 
drwxrwxrwx. 2 root root 4096 3月 11 19:44 dir900 
-rw-rw-rw-. 1 root root 0 3月 11 19:44 file900

修改 shell umask值(永久)

 [root@localhost ~]# vim /etc/profile 
 if  [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then 
 umask 002 
 else 
 umask 022 
 fi 
 [root@localhost ~]# source /etc/profile //立即在当前 shell中生效 

通过 umask决定新建用户 HOME目录的权限

[root@localhost ~]# vim /etc/login.defs UMASK 077 
[root@localhost ~]# useradd gougou 
[root@localhost ~]# ll -d /home/gougou/ 
drwx------. 4 gougou gougou 4096 3月 11 19:50 /home/gougou/ 
 
[root@localhost ~]# vim /etc/login.defs 
UMASK 000 
[root@localhost ~]# useradd yangyang 
[root@localhost ~]# ll -d /home/yangyang/ 
drwxrwxrwx. 4 yangyang yangyang 4096 3月 11 19:53 /home/yangyang/ 

4.高级权限suid,sgid,sticky
高级权限的类型:
suid 4
sgid 2
sticky 1 粘滞位
SUID是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)。 如果属主原本有执行权限,显示为小写 s; 否则,显示为大写 S。

SGID主要实现如下两种功能:
Ø 让执行者临时拥有属组的权限(对拥有执行权限的二进制程序进行设置);
Ø 在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)。
SGID的第一种功能是参考 SUID而设计的,不同点在于执行程序的用户获取的不再是文件所有者的临时权限,而是获取到文件所属组的权限。 如果属组原本有执行权限,显示为小写 s; 否则,显示为大写 S。

Sticky特殊权限位可确保用户只能删除自己的文件,而不能删除其他用户的文件。换句话说,当对某个目录设置了 SBIT粘滞位权限后,那么该目录中的文件就只能被其所有者执行删除操作了 如果其它用户原本有执行权限,显示为小写 t; 否则,显示为大写 T。

系统上的/tmp和/var/tmp目录默认均有 sticky权限;

设置特殊权限:
a、字符
chmod u+s file
chmod g+s dir
chmod o+t dir

b、数字
chmod 4777 file
chmod 7777 file
chmod 2770 dir
chmod 3770 dir

5.文件属性chattr
注:设置文件属性(权限),针对所有用户,包括 root
chattr命令用于设置文件的隐藏权限,格式为:“chattr [参数] 文件”。如果想要把某个隐藏功能添加到文件上,则需要在命令后面追加“+参数”,如果想要把某个隐藏功能移出文件,则需要追加“-参数”。chattr命令中可供选择的隐藏权限参数非常丰富。
lsattr命令用于显示文件的隐藏权限,格式为:“lsattr [参数] 文件”。在 Linux系统中,文件的隐藏权限必须使用 lsattr命令来查看,平时使用的 ls之类的命令则看不出端倪。
参数列表如下:
i 无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的 子文件内容而不能新建或删除文件
a 仅允许补充(追加)内容,无法覆盖/删除内容(Append Only)
S 文件内容在变更后立即同步到硬盘(sync)
s 彻底从硬盘中删除,不可恢复(用 0填充原文件所在硬盘区域)
A 不再修改这个文件或目录的最后访问时间(atime)
b 不再修改文件或目录的存取时间
D 检查压缩文件中的错误
d 使用 dump命令备份时忽略本文件/目录
c 默认将文件或目录进行压缩
u 当删除该文件后依然保留其在硬盘中的数据,方便日后恢复
t 让文件系统支持尾部合并(tail-merging)
X 可以直接访问压缩文件中的内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值