Linux文件和用户管理

文件管理

在Linux中有一句俗语:一切皆是文件。控制程序=控制文件

Linux存放文件

Windows是以多根的方式来组织文件,如C:\或D:\;并且两者之间是属于同一级,对数量没有任何限制

而Linux却不同,Linux是以单根的方式来组织文件,这个根就叫做"/",即Linux所有的文件都在这里面

Linux所有的文件都是以嵌套的形式存储的,如下图;即将一个目录放在另一个目录下,每个目录都有其发挥的作用,需要严格按照目录的规则去存放文件

image-20240906134912615

Linux的一级目录

在不同的Linux发行版中,可能一级目录的名字也会不同

home家目录;Linux是一个多用户的操作系统,在不同用户登录时,所创造的文件应该由自己管理(或是root用户),所以在home下,存放着代表各个用户的目录;如,创造一个名为"wjy"用户,则会在home家目录下产生一个"wjy"的用户,即/home/wjy

root根目录,在Linux中存在一个名为root的上帝用户,root的用户权限非常的大,所以单独给其划分了一个名为root的家目录

总结home目录和root目录:①不同的普通用户之间不能互相的访问对方的家目录;②但是root用户却可以访问任何用户;③所有的普通用户都在home家目录下,只有root用户自己独立一个root目录

etc目录:配置文件目录,主要用于调整程序功能设置的地方;记忆方法Configuration(配置) file(文件) directory(目录);调整功能可以理解为配置脚本的地方

boot目录:存放着林纳斯.托瓦兹(Linux之父)写的Linux内核,boot内的文件与Linux的启动有关系

dev设备目录:存放着关于系统的设备,与Windows的设备管理器相似,如显示器,还有我们在挂载本地源时的镜像文件

var系统变化目录:存放着系统的日志文件,在日志中存放着计算机所出现的问题,记忆方式various可变的,即var目录相当于一个可变的仓库

proc目录,计算机启动之后,内存之类与计算机硬件相关的东西会以文件的方式映射到进proc中;可以联想记忆为Windows中各种支撑计算机运行的硬件,在Linux中变成了文件的形式,因为对于Linux来说,万物皆文件

bin和sbinbin目录下存放着普通用户使用命令的程序,如"/bin/ls",而"sbin"目录下存放着root用户使用命令的程序,如"/sbin/service"(开启或关闭服务)

tmp,存放着系统在运行中产生的临时文件,在关机后会自动删除,在某些系统中,如果tmp目录过大将会自动清理掉其中文件;与Windows中的写文档时,忘记按保存后关机而导致文档内容的丢失;可记忆为temporary翻译为中文为"临时的",即一个临时的家(家就是用来存放东西的);所以说在我们做实验后不想一个一个删除时,就可以在tmp目录下进行操作

media,是移动设备(如U盘等)的默认挂载点/挂载目录;例如将U盘插入电脑后,因为Linux万物皆文件,所以该U盘会以文件的形式被挂载到media目录下;(在Windows中,插入U盘却是直接生成一个新的根);实验:可以尝试着将U盘插入Linux系统的电脑,观察media会发生什么变化

mnt,是手动挂载设备的挂载点;例如当网络连的外部下载源出问题而导致yum不可用时,需要我们将系统镜像的作为yum源进行手动挂载,那么挂载到什么地方呢?就是在我们的mnt目录下,如下命令

mkdir /mnt/yum		//在mnt目录下创建一个挂载镜像的目录
mount /dev/sdb1 /mnt/yum		//将设备sdb1挂载到挂载目录下,注意设备全部都在dev目录下

!!!还是要记住Linux万物皆文件!!!

usr系统自身目录,相当于Windows中的C:\windows,包含着大部分系统应用程序和文件(即系统自带),可同时被多个用户访问

lib和lib64两个目录本质是一样的,都是存放着系统运行所需的的库文件(什么是库文件稍后会进行解释),只不过lib是32位的库文件,而lib64是64位的库文件;类似与Windows 64位系统中的Program Files和Program Files(x32)

库文件的解释:程序运行所需要的代码有一部分是重复的,所以并没有必要没安装一个程序都在下载那一部分的代码;而库文件的作用就是共享了这些代码,使得所有程序都能够访问这段代码,这有效避免了磁盘空间的不足,在很大程度上节约了磁盘空间

文件管理命令

对文件进行基本的操作

创建文件

语法:touch 文件名字,示例创建一个名为file1的txt文件

[root@localhost ~]#touch file1.txt

使用ls可以查看当前目录下的内容,如下图和命令

[root@localhost ~]#ls

image-20240907132736598

使用pwd可以查看当前工作目录

[root@localhost ~]#pwd

image-20240907150809749

创建目录

语法:mkdir 目录名字

选项:mkdir -p 目录路径;作用:当创建目录时,改目录没有上一级则会自动创建上一级,如下

使用tree命令还可观察现处于工作目录的目录结构

image-20240907151516374

在使用mkdir创建目录时,如果想创建多个目录,可以使用空格隔开来创建,如下

[root@localhost ~]#mkdir -p bbb ccc

image-20240907151906142

复制

语法:cp 源文件路径 目标文件夹(只能复制文件,不能复制文件夹)

选项:cp -r 源目录 目标目录;加了选项"r"之后,即可复制文件夹

[root@localhost ~]#cp file1.txt dir1/		//复制文件
[root@localhost ~]#cp -r aaa dir1/		//复制文件夹
[root@localhost ~]#ls dir1/			//验证是否成功

image-20240907152917402

关于Tab键补全

环境:当前目录下存在着file1.txt和file2.txt两个文件;当想要对文件file1.txt进行cp时,可以输入“file”然后按Tab键补全,但因为同时存在着两个文件是以file开头的,所以系统会将存在file开头的文件提示出来,并且这里的Tab键需要敲两下,如下图

image-20240907153554059

但在之后file1.txt的环境下,只需要按一下Tab键,系统就会在命令行中自动补全

移动

语法:mv 源文件路径 目标文件路径;如下

[root@localhost ~]#ls		//查看当前目录下是否有file2.txt文件
[root@localhost ~]#mv file2.txt dir1/
[root@localhost ~]#tree		//观察file2.txt在源目录是否还存在,又去了哪里

image-20240907154233806

删除

语法:rm 文件的路径

选项:rm -rf 文件或目录的路径;“-f"则在删除前不会询问而直接删除,只有回复yes才会删除成功;”-r"加而改选项就可以删除文件夹;如下

[root@localhost ~]# rm file1.txt
rm:是否删除普通空文件 'file1.txt'?e
[root@localhost ~]# ls
[root@localhost ~]# rm -f file1.txt 
[root@localhost ~]# ls
[root@localhost ~]# rm -r ddd
rm:是否删除目录 'ddd'?y
[root@localhost ~]# ls
[root@localhost ~]# rm -rf ccc
[root@localhost ~]# ls

image-20240907160215988

删库跑路命令

"/“表示系统的根目录,”*"表示全部文件。两者结合起来就是根目录下的全部文件,即整个系统

[root@localhost ~]#rm -rf /*

查看文件内容

cat全部查看

语法:cat 文件名称;cat命令会将查看的文档内从头到尾都输出出来

[root@localhost ~]#cat file1.txt

image-20240907161056010

more翻页查看

语法:more 文件名称;如果文档内行数足够多,可以进行翻页查看,按空格键即可翻到下一页

[root@localhost ~]#more file1.txt
head显示前十行

语法:head 文件名称;默认显示文档内的前十行

选项:head -2 文件名称;显示文档内的前两行,“2"这个数字可改,如改为”-4"则显示文档内的前四行

[root@localhost ~]#head file1.txt
tail显示后十行

语法:tail 文件名称;默认显示文档内的后十行

选项:tail -2 文件名称;显示文档内的后两行,“2"这个数字可改,如改为”-4"则显示文档内的后四行

[root@localhost ~]#tail file1.txt
grep过滤查看

语法:grep string 文件名称;string表示需要过滤的字符串;如下需要在file1.txt中过滤带有"t"的内容

[root@localhosr ~]#grep t file1.txt

image-20240907162642517

使用vi或vim来修改文件内容

vim和vi的作用主要是在命令行界面下,不使用鼠标,只是用键盘对应系统内的光标,而对文档的内容进行修改

vim是vi的升级版,在最小化安装系统是,是只有vi的,而没vim的

vim或vi分为主要分为三个模式,①命令行模式;②插入模式;③末行模式;简单的转换方法如下图

image-20240907163353501

命令行模式

语法:vim 文件名称;来进入文本编辑器界面

[root@localhost ~]#vim file1.txt

image-20240907163719946

在该模式下,有许多的按键功能,即在命令行模式下直接输入就可以产生想要的效果

快速定位功能

1、数字"0"快速回到光标所在行的解析;2、符号"$"快速回到光标所在行的结尾

3、大写"G"快速回到文档的结尾;4、小写"gg"快速回到文档的开头

5、大写的"3G"快速返回到文档的第3行,数字可变,如"2G"则快速返回到文档的第2行

查找功能

1、“/string"可以快速地查找”/"后的字符,按下"n"可以查找下一页的内容

复制粘贴等操作

1、"yy"复制当前光标所在行的内容

2、"p"粘贴刚刚所复制的内容

3、"u"撤销刚刚的操作

4、"3yy"将文档内前3行进行复制,数字可改

插入模式

以下操作都是在命令行模式下开始

1、按下按键"i"进入插入模式,会在光标内容前的内容开始输入

2、按下按键"a"进入插入模式,会在光标内容后的内容开始输入

3、按下按键"O"会在光标的下一行开始输入

4、按下按键"A"会在光标所在行的末尾开始输入

上述几种进入插入模式的方法,其实无需多记,只需要记一个"i"即可

末行模式
基本操作

以下操作都是在命令行模式下开始

按下按键":"进入末行模式

输入w后回车,可以进行保存操作;输入q后回车,可以进行退出操作;但一般我们都是同时输入wq回车,来进行保存并退出,以完成我们对文档的修改

扩展操作

"q!"强制退出

w 新的文件名称"类似与另存为的操作,如下操作,将该文档的内容另存为file2.txt

:w file2.txt

"set nu"在文档内容中显示行号;"set nonu"在文档内容中不显示行号;“set list“在文档内容中显示控制字符,例如回车到下一行的字符”$"也会显示出来

image-20240907172238743

总结

上述内容中这么多会导致我们难以记忆,实际上我们只需要记住几种模式之间的互换,换句话说,我们只需要成功地将所想写入的内容写入,然后成功地保存并退出即可;至于这多种方法其实只需要记忆一个就可以了,如下

首先使用vim进入我们需要编辑的文档(这里假设为file1.txt)

[root@localhost ~]# vim file2.txt 

这个时候我们进入到了命令行模式(先不要管哪些功能),然后进入插入模式进行输出

按下i键

我们输出完后,需要进行保存并退出

按下键盘的左上角的Esc键,重新回到命令行模式
按键":"键,进入末行模式,输入wq后按下回车;即可完成我们对文档的编写内容

绝对路径和相对路径

路径的切换

语法:cd 目标路径;如下,切换到"aaa/bbb/ccc/ddd/eee"下

[root@localhost ~]# cd aaa/bbb/ccc/ddd/eee
[root@localhost eee]# pwd					//验证当前在哪个路径

image-20240907174807208

绝对路径

所谓绝对路径,就是从整个系统的起点开始,在Linux中指的就是根目录"/“,例如”/root/aaa/bbb/ccc/ddd",该路径的写法就是从根开始

相对路径

相对路径的写法有两种,①"./“②”…/"

1、"./“代表当前路径,在”./“中的”."可不写,但必须保证当前目录下有想要改变的文件,如下,想要改变一个当前目录下一个不存在的文件

image-20240907175345397

2、“…/“代表了上一级路径,上一级的意思就是”/root/aaa/bbb/ccc/ddd/eee”,假设我当前在eee目录下,则我的上一级是ddd;如下,file2.txt文件在ddd目录下,而我现在的工作目录是在eee;实验:我要在eee目录下,对ddd目录下的file2.txt进行操作

image-20240907180339321

总结

对与绝对路径和相对路径在文件管理的操作中,如删除、复制、移动等等,都是适用的

文件类型

查看文件类型可以使用"ls -l",也可以使用其缩写"ll"

image-20240907192315956

常见类型为:①普通文件;如文本类型,二进制文件类型,压缩文件类型,还有电影图片等,以"-"开头;②"d"开头的目录类型文件

非常见类型为:"b"设备文件(块设备)打印机,终端(dev/tty)等;"l"链接文件(淡蓝色,如/bin或/sbin);"s"套接字文件;"p"管道文件

用户管理

使用id或whoami查看当前用户信息,如下

image-20240908172531738

使用"ls -l"或"ll"可以查看文件的owner(所有者),在显示信息的第3列

image-20240908173545460

查看运行进程的用户,使用ps aux

第一列为user(用户),表示运行该程序的用户身份信息,换句话说就是什么用能运行该程序

[root@localhost ~]#ps aux

image-20240908174149762

用户信息存储文件

用户基本信息文件

用户基本信息存放在"/etc/passwd",该文件使用冒号分割成7列字段;最好不要用使用vi或vim修改该文件,因为用户的基本信息与很多文件相关联,如果修改"/etc/passwd"的话,那么要同时修改许多文件。

我们可以使用cat命令来查看该文件

[root@localhost ~]#cat /etc/passwd

image-20240908175214804

第一列为用户名,在没有增加用户的情况下,查看的结果一般第一个为root用户,最后一个为创建系统时所创建的用户

第二列为密码占位符,但是密码的信息一般不在这里

第三列为UID(用户号),当UID为0的时候说明时root用户;当UID为1~999的时候是系统用户,系统用户是在系统某些程序运行的时候所需要的用户;当UID为1000+的时候是普通用户,普通用户一般是自行创建的用户

image-20240908184446213

第四列为GID(组号),表示用户的所属组,当多个用户进入一个组后,只需要配置组的权限,那么该组下的用户可以被分配到这个权限。在用户被创建的同时,会自动创建一个与用户同名的组

第五列为对该用户的描述

第六列为该用户的家目录

第七列为用户登录系统所使用的shell,一般为/bin/bash;但是系统用户的shell大多数为/sbin/nologin,这个shell表示不可登录

用户密码信息文件

用户的密码信息文件存储在/etc/shadow,可以使用cat命令查看其内容,主要内容有加密过后的密码和密码的各种策略

[root@localhost ~]#cat /etc/shadow

第一列为用户名

第二列为加密的密码;$1开头表示是MD5加密方式,$5表示SHA-256(256位)加密方式,$6表示SHA-512(512位)加密方式

第三列为从某个时刻起到最后一次修改密码的天数,在大部分的Linux中这个时间起点位1970年1月1日

第四列为两次修改密码之间所需的最小天数

第五列为密码保持有效的最大天数,系统自己会设置为99999

第六列为警告时间,意思是系统在多少天之前开始警告用户密码即将失效,系统自己会设置为7

第七列为不活动时间,意思是到期后多少天就不能用账户了(软限制)

第八列为失效时间,意思是到了多少天就一定不能使用账户了

第九列是被保留的,用作未来的开发

组信息文件

组的信息一般在/etc/group目录下,可以使用head -1 /etc/group来查看第一个组信息

[root@localhost ~]#head -1 /etc/group 

image-20240908191049015

第一列为组名

第二列为组的密码

第三列GID,组ID

第四列为组的成员

用户和组的管理

用户的管理

创建用户

语法:useradd 用户的名字,如下

[root@localhost ~]#useradd user01

可通过使用id 命令来查看刚刚创建的user01的基本信息

image-20240908193113843

第一列为用户id;第二列为在用户被创建时的所生成的组的组id;第三列为在用户创建完后,自行附加上的组id

几个选项:-u表示指定UID;-d可以指定家目录;-s可以指定登录的shell;如下,

[root@localhost ~]#useradd user02 -u 1530			//创建并指定用户的UID
[root@localhost ~]#useradd user03 -d /user03		//创建并指定用户的家目录
[root@localhost ~]#useradd -s /sbin/nologin user05	//创建并指定用户的登录shell为nologin,使得user05不能正常登录

image-20240908194556269

删除用户

语法:userdel -r user02;如果在删除用户中没有增加上-r,则不会自动删除掉随着用户创建而来的家目录等文件

[root@localhost ~]#userdel -r user02
[root@localhost ~]#userdel -r user03
[root@localhost ~]#userdel -r user05
修改用户的密码

语法:passwd 用户名;如果不输入用户名,即代表修改当前所操作用户的密码信息

[root@localhot ~]#passwd user01

image-20240908195337688

修改用户信息

语法:usermod -各种选项 用户名;如下,修改用户的登录shell

[root@localhosr ~]#usermod -s /sbin/nologin user02

组的管理

查看组信息为"cat /etc/group"

创建组

语法:groupadd 组名;如下创建一个名为hr的组

[root@localhosr ~]#groupadd hr
[root@localhosr ~]#tail -3 /etc/group		//使用tail验证查看组信息

image-20240908200028937

选项:使用选项"-g"可以在创建组的时候指定组id(GID);但一定要注意,这个指定的GID不能重复

[root@localhost ~]#groupadd net01 -g 1007		//在创建组net01时,指定其GID为1007
[root@localhosr ~]#tail -3 /etc/group		//使用tail验证查看组信息

image-20240908200405638

删除组

语法:groupdel 组名;如下删除net01组

[root@localhost ~]#groupdel net01
[root@localhosr ~]#tail -3 /etc/group		//使用tail验证查看组信息

image-20240908200809097

组成员管理
通过命令的方式管理
将用户追加到其他组中

可以使用id命令来查看第三列是否追加成功

语法:usermod -aG 组名 用户名;如下将用户user02追加到hr组中

[root@localhost ~]#usermod -aG hr user02
[root@localhost ~]#id user02		//查看user02的用户信息进行验证

image-20240908201358029

将用户移除组中

语法:gpasswd -d 用户名 组名;如下,将用户user02从hr组中移除

[root@localhost ~]#gpasswd -d user02 hr
[root@localhost ~]#id user02

image-20240908202214280

通过配置文件进行管理

无论时追加用户到组还是将用户移除组,都需我们记住一些命令;但如果我们直接对组信息的文件进行修改,是否就可以不在使用繁琐的命令。答案是可以的

如该实验:直接进入组信息的配置文件中,将user02、user03、user04加到组中;

使用vim命令进入/etc/group,组信息文件,按下G进入到最后一行,找到hr组,在末尾的":"上添加user02、user03、user04互相之间用逗号隔开,最后使用id命令验证是否成功

image-20240908203033357

image-20240908203155259

提权管理(暂时了解部分)

提权分为两种类型:①永久提权(su);②临时提权(sudo)

永久提权(Switching user with su)

使用su命令可以快速的切换账户;语法:su 账户名

如下,使用su来切换账户,接着使用id来验证是否成功

[root@localhost ~]#su user04
[root@localhost ~]#id

因为user04是普通账户,权限很低,有部分命令是执行不了的,如"rm -rf /*",rm会提示无法删除,如下

image-20240908203935951

当我们在user04下执行了删除命令后,虽然说其没有权限,但还是会造成影响,如下,这种情况直接将用户user04删除即可;其原因主要是bash的配置出问题

image-20240908204338363

普通用户可以使用su互相切换,也可以与root账户切换,但前提是知道每个账户的密码

[root@localhost ~]#su user05

临时提权(Running commands as root with sudo)

sudo可以是普通用户临时的像是root用户执行特殊权限的命令;语法:sudo 特殊命令(如rm -rf /*)

关于临时提权在系统中还有个配置文件,即"/etc/sudoers",查看其中关于描述root的权限;使用vim来查看/etc/sudoers,并在命令行模式下输入"/root"查找关于root的关键词;注释的意思:##(表示这行信息是注释)user(用户) MACHINE(需要登录的主机)=COMMANDS(可变化的身份) 执行什么命令

该配置内容说明了:第一列表示账户为root,第二列表示允许登录所有的主机,第三列表示可以访问的用户,第四列表示可以执行上面命令(一般表示为可以使用哪个文件)

image-20240908212038798

临时授权实验:在权限配置文件内配置,使用户zhangsan(一个普通账户,原本不能添加账户),配置其临时权限(sudo)使其能够在不输入密码的情况下,进行添加用户的操作;

操作:在配置文件中写入"zhangsan ALL=(ALL) NOPASSWD: /usr/sbin/useradd";解读:用户zhangsan 可以在所有的主机上在所有的用户上,不输入密码(NOPASSWD)地情况下能够使用文件useradd,即能够使用useradd进行操作

验证:进入zhangsan的用户下,尝试创建一个名为lisi的用户,如果直接使用"useradd lisi"的命令当然会建立失败,因为我们现在做的是临时提权的实验(sudo),当然在打命令时需要在命令前面加上sudo,即"sudo useradd lisi";而普通用户使用sudo的话,将是另一种报错

image-20240908214413559

image-20240908214312273

image-20240908214115687

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值