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规则等,优先级低于passwd
和shadow
,可以用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 用户
修改密码。
有关路径
我们在找etc
中passwd
的文件时使用的是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文件夹中。