Linux文件管理

Linux系统中,文件以树状图形式存储,即单根文件系统,以用户为分支分别存储文件。

文件操作

相对路径表示方法,.当前目录,..上层目录,~家目录,也可以使用绝对路径/的表示方法,其他常用命令汇总如下

ls 列出目录及文件名
cd 切换目录
pwd 显示当前目录
mkdir 创建新目录  -p可递归创建多级目录
redir 删除空目录
cd 切换目录
touch 创建新文件或修改时间属性

rm 删除
	-f 忽略不存在的文件
	-i 互动模式,删除前询问使用者
	-r 递归删除,危险 可以使用通配字符*匹配所有,如rm f* 删除所有f开头的文件
mv 移动
	格式为 源文件 目录
	-f 强制,已经存在源文件直接覆盖
	-i 已经存在文件,覆盖前先询问  mv就是mv -i 的别名
	-u 若目标已存在,有新的源再升级
	-v 显示复制的详细过程

cp 复制文件或目录 
	格式为cp 源文件 目的 
	-d 只复制结构属性而非文件本身,即快捷方式
	-p 连同属性一同复制
	-r 递归复制整个目录     通常形式为 -pdr

查看文件

linux中一切皆文件,通常使用cat命令打开文本文件并显示,-n表示从1开始输出行数的编号,-b遇到空白行不输出编号,-s两行以上的空白行当作一行输出,-A显示控制字符。

浏览文件使用less命令,支持翻页和搜索,类似于man手册,还可以使用head查看文件开头部分内容,-n显示行数,-c显示字节数,也可以使用tail从行尾读文件,选项相同,另加了-f循环读取,一般用于看日志信息。

vim编辑器

Linux所有系统都内置vi工具,用于查看编辑文本文件,但使用vi打开文件没有颜色标识,也没有程序编辑能力,所以在此基础上开发了vim编辑器用于解决上述问题,但该工具不内置,需要手动执行yum -y install vim进行安装。

该工具有三种模式,命令模式,输入模式和末行模式,具体区分及使用方法如下:

命令模式:启动时默认模式,输入的是命令,在该模式下:w保存,:q退出,:wq保存并退出

输入模式:命令模式下按i进入输入模式,esc进入命令模式

末行模式:命令模式下输入:进入,通过wq按键进行保存退出等操作,命令模式下保存退出实质是通过末行模式实现。

文件属性及查找

属性查看

Windows通过文件后缀来判断文件类型,Linux不同,文件打开方式不对时会直接出错,类型查看方法有三种,首先是ls -l,通过输出的第一位判断文件类型,具体对应为:

- 文档
d 目录文件
b 块设备文件,如硬盘、u盘等
c字符设备文件
s套接字文件
p管道文件
/ 链接文件,快捷文件

第二种是通过stat 文件查看文件属性,示例新建名为file01的文件信息展示如下图;

其中要注意的是三个时间,最近访问atime、最近修改mtime和最近改变ctime,最近改变指文件状态发生改变,比如权限,所有者或所属组等信息变化时的时间。

第三种是使用file 文件名方式查看,输出如下图:

位置查找

文件查找可以使用which 文件名的方法,但该方法只会在其环境变量路径$PATH下查找,相当于只能查找提前设置好了的文件位置,环境变量实质是告诉操作系统程序在运行时的默认配置,目前已有的环境变量可以使用echo $PATH查看。

也可以使用locate范本查找,该程序系统不内置,需首先使用yum -y install mlocate安装下载,该程序是将所有文件位置都存到数据库中,然后根据查找内容在数据库中检索,所以其查找依赖于数据库的建立和更新,一般一天更新一次,也可以使用updatedb手动更新,-c可以设定查找数量,-n设定显示n个,-r根据正则表达式检索。

最常用的还是find实时查找工具,该工具的特征就是速度慢,可以根据多种条件匹配,语句结构为find 选项 路径 查找条件 处理动作,首先介绍查找条件如下:

-name		根据名称查找
-size		根据大小查找 +5M大于5M
-maxdepth	最大深度
-mtime		按时间查找,+5为超过5天 =可省略
-user		按属主查找,nouser为无属主
-group		按属组查找,nogroup无属组
-type		按文件类型查找
-perm		按文件权限
-regex		按正则表达式
-a			多个条件and并列
-o			or并列
-not		取反

处理动作如下:

‐print		默认的处理动作,显示至屏幕
‐ls			类型于对查找到的文件执行ls ‐l命令
‐delete		删除查找到的文件

用户管理

Linux是多用户,多任务的分时操作系统,为了方便管理多个用户,又产生了用户组的概念,输入id命令可查看当前用户的信息,其中uid为用户名,gid为用户组id,groups为附加组id,该过程可加选项输出特定的id,uid的分配规则为,0是超级管理员root,999以下为系统用户,1000以上是普通用户。下面通过ll命令示例查看文件信息:

相关文件

之前说过Linux中一切皆文件,用户及相关信息都是以文件形式保存的,首先看passwd文件,

该格式分别为用户名:密码:uid:gid:描述:家目录:登陆后执行的命令,第一行为root用户,下面的都是其他用户,这里我还没新建其他用户,所以下面的可能是一些默认指令。

上面的密码使用x占位,具体真实的密码存放在shadow文件中,只输出第一行即可head -n 1 /etc/shadow,输出为root:$6$6PX6oUZ8qOx72WpA$RGimaIGG.PNWuQLOjI6bmbUD.E3AvjBbnm5rtzVhBCfdAtEFJGNt3mDdqPajfdoSZ3GsMzttAE3wvMD33KNbK1::0:99999:7:::

具体格式为用户名:加密算法,加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段该字段中加密算法为$6$SHA-512算法加密。

还有group文件存储用户和用户组的关系。

login.defs文件,实现对登录的限制,设置和id规则等,优先级低于passwdshadow,可以用change 选项 用户名命令修改,选项如下:

-d		将最近一次密码设置时间设置为最近日期 用change -d o 用户名 设置下次登陆时更改密码 
-m		设置两次改变密码之间相距的最小天数
-M		设置将两次改变密码之间相距的最大天数
-w		设置密码过期前的警告天数

用户组管理

添加用户组,groupadd 选项 组名,详细参数如下:

-g:指定新建工作组的 id;
-r:创建系统工作组,系统工作组的组ID小于 500;
-K:覆盖配置文件/etc/login.defs
-o:允许添加组 ID 号不唯一的工作组。
-f:如果指定的组已经存在,此选项将失明了仅以成功状态退出。当与 -g 一起使用,并且指定的GID_MIN已经存在时,选择另一个唯一的GID(即-g关闭)。

修改用户组,groupmod 选项 组名,选项
-g:将组 ID 改为 GID
-n:改名为 NEW_GROUP

删除用户组,groupdel 组名

组成员管理,gpasswd 选项 组名,具体选项如下:

-a:添加用户到组;
-d:从组删除用户;
-A:指定管理员;
-M:替换组中的全部用户列表,不包含在内的用户将会从组中删除;
-R:限制用户登入组,只有组中的成员才可以用newgrp加入该组。

用户管理

useradd 选项 用户名添加用户,选项如下:

-c comment:指定一段注释性描述。
-d 目录:指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-m:创建用户的主目录
-g 用户组:指定用户所属的用户组,默认会创建一个和用户名同名的用户组。
-G 用户组:用户组 指定用户所属的附加组,一个用户可以属于多个附加组。
-s Shell文件:指定用户的登录Shell。
-u 用户号:指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。

su命令切换用户,默认在当前目录切换,加-用户名为切换到用户目录,-c 命令执行命令后切换回原用户,-s shell使用指定的 shell 替代目标用户的默认 shell。

usermod 选项 用户修改用户,选项如下:

-c<备注>:修改用户帐号的备注文字。
-a:追加,默认的修改是覆盖
-d登入目录>:修改用户登入时的目录。
-e<有效期限>:修改帐号的有效期限。
-f<缓冲天数>:修改在密码过期后多少天即关闭该帐号。
-g<群组>:修改用户所属的群组。
-G<群组>:修改用户所属的附加群组。
-l<帐号名称>:修改用户帐号名称。
-L:锁定用户密码,使密码无效。
-s:修改用户登入后所使用的shell。
-u:修改用户ID。
-U:解除密码锁定。

userdel -r 用户名删除用户,-r表示删除目录下所有文件。

shell命令

用户登录后默认执行的指令存放在/etc/passwd文件中,最后的字段是登录成功后的命令,如图所示:

/bin/bash是Linux的命令行工具,我们正常登陆之后默认就是进入命令行
/sbin/nologin如果写成nologin,那么用户将无法登录,有些只作为进程存在而无需切换登录状态的用户适用于该状态。

可在该文件中手动修改指令,实现用户登录自启动项。

用户密码管理

root用户可直接修改普通用户密码,普通用户需要提供原密码才能修改,指令为passwd 选项 用户名,选项如下:

-k:保持身份验证令牌不过期
-d:删除已命名帐号的密码(只有根用户才能进行此操作)
-l:锁定指名帐户的密码(仅限 root 用户)
-u:解锁指名账户的密码(仅限 root 用户)
-x:密码的最长有效时限(只有根用户才能进行此操作)
-n:密码的最短有效时限(只有根用户才能进行此操作)
-w:在密码过期前多少天开始提醒用户(只有根用户才能进行此操作)
-i:当密码过期后经过多少天该帐号会被禁用(只有根用户才能进行此操作)
-S:报告已命名帐号的密码状态(只有根用户才能进行此操作)
--stdin:从标准输入读取令牌(只有根用户才能进行此操作)

也可以使用管道符从标准输入中读入口令,指令为echo 密码|passwd -stdin 用户修改密码。

有关路径

我们在找etcpasswd的文件时使用的是cd \etc,而在我们执行目录时只需cd 目录即可,为什么这里要加斜杠呢?而且我在目录下执行ls时也发现,工作目录下并没有etc这个文件夹,到底什么时候加斜杠,什么时候直接cd,Linux系统中的目录到底是怎么个结构呢?必须得研究研究,通过如下几条命令应该就看的很清除了:

可以看到进入用户的默认工作目录为root,上层就是最根的目录/,etc和其他配置文件是和root目录并列的结构,具体配置文件内容可以看,普通用户是在home文件中。

权限管理

用户权限管理

sudo 选项 用户 命令实现暂时给用户执行命令的权限,执行时系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限,普通用户默认不具有sudo权限,需要将其添加到admin组或者wheel组或者sudo组中,执行选项如下:

-u:以指定用户或 ID 运行命令(或编辑文件)
-l:显示出自己(执行 sudo 的使用者)的权限
-b:将要执行的指令放在后台执行
-i: 以目标用户身份运行一个登录 shell;可同时指定一条命令。相当于切换到root,不过只需要用户自己的密码即可。`

sudoers文件十分敏感,写入时三思而行。

文件权限管理

属主属组其他UGO管理

该管理决定赋予用户或用户组以何种方式访问文件,文件权限可以通过ls -l查看,标识三位一组,分别对应属主,属组和其他,rwx分别表示读、写、执行权限,对于目录的权限分别为:可用ls,可创建删除目录,和可用cd访问。

修改文件属主chown 选项 属主:属组 文件名,选项为-R处理目录及其下子目录,-V显示详细的处理信息。

修改文件权限chmod 选项 对象+权限 文件名,同样可用-R递归处理子文件及目录,具体解释为:

u表示该文件的拥有者,g表示与该文件的拥有者属于同一个群体(group)者,o表示其他以外的人,a表示这三者皆是。
+表示增加权限、-表示取消权限、=表示唯一设定权限。
r表示可读取,w表示可写入,x表示可执行

权限也可使用八进制数来标识,即1为可执行,2为只写,4为只读,0-7八位数字即可标识权限。

文件访问控制列表ACL管理

上面的方法只能针对三种关系管理,为了实现对具体用户实现更精准的管理,需要使用ACL方法实现。

获取文件权限信息getfacl 文件名

给予用户权限setfacl -m u:用户名:权限 文件或目录名

移除用户权限setfacl -x u:用户名:权限 文件或目录名

移除用户组权限setfacl -x g:用户组名:权限 文件或目录名

上述权限管理方法都不会被子目录或文件继承,可以修改默认设置实现,setfacl -x d:g:用户组名:权限 文件或目录名,前面加了d接口设置默认权限。

可用选项如下:

-m:更改文件的访问控制列表
-M:从文件读取访问控制列表条目更改
-x:根据文件中访问控制列表移除条目
-X:从文件读取访问控制列表条目并删除
-b:删除所有扩展访问控制列表条目
-k:移除默认访问控制列表
-d:应用到默认访问控制列表的操作
-R:递归操作子目录

mask有效权限,用户管理用户或用户组能够拥有的最大ACL权限,设置其最大不能超过mask的规定,设置方法为setfacl -m m::权限 目录,因为没有明确用户,缺省即可。

特殊权限

suid只用在文件上,开放属主权限给其他用户,如passwd的权限为rws,只有root有写权限,但普通用户也可用修改文件,就是赋予了普通用户属主权限,添加方法为chmod u+s 文件名chmod 4765 文件名,八进制标识权限中,4表示uid,2表示gid,1表示sticky

sgid用于文件或目录上,文件是对其他用户开放属组的权限,目录是规定其下创建所有子目录或文件的属组都相同,设置方法为chomd g+s 目录或文件

sticky只用于目录,表示目录下的所有文件和子目录只能由属主删除,设置方法为chmod o+t 目录

总结

本章学习了Linux中管理文件的方法,包括文件查看,编辑,和权限管理方法,而由于Linux中一切皆文件,所以连带着用户的管理方法也一起在本章学习,命令都比较简单,但很杂需要实际联系才能熟练,还有选项和不同命令的融合,难度会随着学习的指令变多急速上升。

此外在实践中对路径产生的疑惑也得以解决,Linux中根目录下存放系统的配置文件和用户目录,其中root用户单独存放,普通用户则统一存放在home文件夹中。

相关推荐
CP-DD12 分钟前
Docker 容器化开发 应用
运维·docker·容器
blessing。。1 小时前
I2C学习
linux·单片机·嵌入式硬件·嵌入式
2202_754421541 小时前
生成MPSOC以及ZYNQ的启动文件BOOT.BIN的小软件
java·linux·开发语言
努力的悟空2 小时前
国土变更调查拓扑错误自动化修复工具的研究
运维·自动化
运维&陈同学2 小时前
【zookeeper03】消息队列与微服务之zookeeper集群部署
linux·微服务·zookeeper·云原生·消息队列·云计算·java-zookeeper
旦沐已成舟2 小时前
DevOps-Jenkins-新手入门级
服务器
周末不下雨3 小时前
win11+ubuntu22.04双系统 | 联想 24 y7000p | ubuntu 22.04 | 把ubuntu系统装到1T的移动固态硬盘上!!!
linux·运维·ubuntu
软件技术员3 小时前
Let‘s Encrypt SSL证书:acmessl.cn申请免费3个月证书
服务器·网络协议·ssl
哎呦喂-ll3 小时前
Linux进阶:环境变量
linux