文件管理
在Linux中有一句俗语:一切皆是文件。控制程序=控制文件
Linux存放文件
Windows是以多根的方式来组织文件,如C:\或D:\;并且两者之间是属于同一级,对数量没有任何限制
而Linux却不同,Linux是以单根的方式来组织文件,这个根就叫做"/",即Linux所有的文件都在这里面
Linux所有的文件都是以嵌套的形式存储的,如下图;即将一个目录放在另一个目录下,每个目录都有其发挥的作用,需要严格按照目录的规则去存放文件
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和sbin,bin目录下存放着普通用户使用命令的程序,如"/bin/ls",而"sbin"目录下存放着root用户使用命令的程序,如"/sbin/service"(开启或关闭服务)
tmp,存放着系统在运行中产生的临时文件,在关机后会自动删除,在某些系统中,如果tmp目录过大将会自动清理掉其中文件;与Windows中的写文档时,忘记按保存后关机而导致文档内容的丢失;可记忆为temporary翻译为中文为"临时的",即一个临时的家(家就是用来存放东西的)
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
使用pwd可以查看当前工作目录
[root@localhost ~]#pwd
创建目录
语法:mkdir 目录名字
选项:mkdir -p 目录路径;作用:当创建目录时,改目录没有上一级则会自动创建上一级,如下
使用tree命令还可观察现处于工作目录的目录结构
在使用mkdir创建目录时,如果想创建多个目录,可以使用空格隔开来创建,如下
[root@localhost ~]#mkdir -p bbb ccc
复制
语法:cp 源文件路径 目标文件夹(只能复制文件,不能复制文件夹)
选项:cp -r 源目录 目标目录;加了选项"r"之后,即可复制文件夹
[root@localhost ~]#cp file1.txt dir1/ //复制文件
[root@localhost ~]#cp -r aaa dir1/ //复制文件夹
[root@localhost ~]#ls dir1/ //验证是否成功
关于Tab键补全
环境:当前目录下存在着file1.txt和file2.txt两个文件;当想要对文件file1.txt进行cp时,可以输入“file”然后按Tab键补全,但因为同时存在着两个文件是以file开头的,所以系统会将存在file开头的文件提示出来,并且这里的Tab键需要敲两下,如下图
但在之后file1.txt的环境下,只需要按一下Tab键,系统就会在命令行中自动补全
移动
语法:mv 源文件路径 目标文件路径;如下
[root@localhost ~]#ls //查看当前目录下是否有file2.txt文件
[root@localhost ~]#mv file2.txt dir1/
[root@localhost ~]#tree //观察file2.txt在源目录是否还存在,又去了哪里
删除
语法: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
删库跑路命令
"/“表示系统的根目录,”*"表示全部文件。两者结合起来就是根目录下的全部文件,即整个系统
[root@localhost ~]#rm -rf /*
查看文件内容
cat全部查看
语法:cat 文件名称;cat命令会将查看的文档内从头到尾都输出出来
[root@localhost ~]#cat file1.txt
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
使用vi或vim来修改文件内容
vim和vi的作用主要是在命令行界面下,不使用鼠标,只是用键盘对应系统内的光标,而对文档的内容进行修改
vim是vi的升级版,在最小化安装系统是,是只有vi的,而没vim的
vim或vi分为主要分为三个模式,①命令行模式;②插入模式;③末行模式;简单的转换方法如下图
命令行模式
语法:vim 文件名称;来进入文本编辑器界面
[root@localhost ~]#vim file1.txt
在该模式下,有许多的按键功能,即在命令行模式下直接输入就可以产生想要的效果
快速定位功能
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“在文档内容中显示控制字符,例如回车到下一行的字符”$"也会显示出来
总结
上述内容中这么多会导致我们难以记忆,实际上我们只需要记住几种模式之间的互换,换句话说,我们只需要成功地将所想写入的内容写入,然后成功地保存并退出即可;至于这多种方法其实只需要记忆一个就可以了,如下
首先使用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 //验证当前在哪个路径
绝对路径
所谓绝对路径,就是从整个系统的起点开始,在Linux中指的就是根目录"/“,例如”/root/aaa/bbb/ccc/ddd",该路径的写法就是从根开始
相对路径
相对路径的写法有两种,①"./“②”…/"
1、"./“代表当前路径,在”./“中的”."可不写,但必须保证当前目录下有想要改变的文件,如下,想要改变一个当前目录下一个不存在的文件
2、“…/“代表了上一级路径,上一级的意思就是”/root/aaa/bbb/ccc/ddd/eee”,假设我当前在eee目录下,则我的上一级是ddd;如下,file2.txt文件在ddd目录下,而我现在的工作目录是在eee;实验:我要在eee目录下,对ddd目录下的file2.txt进行操作
总结
对与绝对路径和相对路径在文件管理的操作中,如删除、复制、移动等等,都是适用的
文件类型
查看文件类型可以使用"ls -l",也可以使用其缩写"ll"
常见类型为:①普通文件;如文本类型,二进制文件类型,压缩文件类型,还有电影图片等,以"-"开头;②"d"开头的目录类型文件
非常见类型为:"b"设备文件(块设备)打印机,终端(dev/tty)等;"l"链接文件(淡蓝色,如/bin或/sbin);"s"套接字文件;"p"管道文件
用户管理
使用id或whoami查看当前用户信息,如下
使用"ls -l"或"ll"可以查看文件的owner(所有者),在显示信息的第3列
查看运行进程的用户,使用ps aux
第一列为user(用户),表示运行该程序的用户身份信息,换句话说就是什么用能运行该程序
[root@localhost ~]#ps aux
用户信息存储文件
用户基本信息文件
用户基本信息存放在"/etc/passwd",该文件使用冒号分割成7列字段;最好不要用使用vi或vim修改该文件,因为用户的基本信息与很多文件相关联,如果修改"/etc/passwd"的话,那么要同时修改许多文件。
我们可以使用cat命令来查看该文件
[root@localhost ~]#cat /etc/passwd
第一列为用户名,在没有增加用户的情况下,查看的结果一般第一个为root用户,最后一个为创建系统时所创建的用户
第二列为密码占位符,但是密码的信息一般不在这里
第三列为UID(用户号),当UID为0的时候说明时root用户;当UID为1~999的时候是系统用户,系统用户是在系统某些程序运行的时候所需要的用户;当UID为1000+的时候是普通用户,普通用户一般是自行创建的用户
第四列为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
第一列为组名
第二列为组的密码
第三列GID,组ID
第四列为组的成员
用户和组的管理
用户的管理
创建用户
语法:useradd 用户的名字,如下
[root@localhost ~]#useradd user01
可通过使用id 命令来查看刚刚创建的user01的基本信息
第一列为用户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不能正常登录
删除用户
语法:userdel -r user02;如果在删除用户中没有增加上-r,则不会自动删除掉随着用户创建而来的家目录等文件
[root@localhost ~]#userdel -r user02
[root@localhost ~]#userdel -r user03
[root@localhost ~]#userdel -r user05
修改用户的密码
语法:passwd 用户名;如果不输入用户名,即代表修改当前所操作用户的密码信息
[root@localhot ~]#passwd user01
修改用户信息
语法: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验证查看组信息
选项:使用选项"-g"可以在创建组的时候指定组id(GID);但一定要注意,这个指定的GID不能重复
[root@localhost ~]#groupadd net01 -g 1007 //在创建组net01时,指定其GID为1007
[root@localhosr ~]#tail -3 /etc/group //使用tail验证查看组信息
删除组
语法:groupdel 组名;如下删除net01组
[root@localhost ~]#groupdel net01
[root@localhosr ~]#tail -3 /etc/group //使用tail验证查看组信息
组成员管理
通过命令的方式管理
将用户追加到其他组中
可以使用id命令来查看第三列是否追加成功
语法:usermod -aG 组名 用户名;如下将用户user02追加到hr组中
[root@localhost ~]#usermod -aG hr user02
[root@localhost ~]#id user02 //查看user02的用户信息进行验证
将用户移除组中
语法:gpasswd -d 用户名 组名;如下,将用户user02从hr组中移除
[root@localhost ~]#gpasswd -d user02 hr
[root@localhost ~]#id user02
通过配置文件进行管理
无论时追加用户到组还是将用户移除组,都需我们记住一些命令;但如果我们直接对组信息的文件进行修改,是否就可以不在使用繁琐的命令。答案是可以的
如该实验:直接进入组信息的配置文件中,将user02、user03、user04加到组中;
使用vim命令进入/etc/group,组信息文件,按下G进入到最后一行,找到hr组,在末尾的":"上添加user02、user03、user04互相之间用逗号隔开,最后使用id命令验证是否成功
提权管理(暂时了解部分)
提权分为两种类型:①永久提权(su);②临时提权(sudo)
永久提权(Switching user with su)
使用su命令可以快速的切换账户;语法:su 账户名
如下,使用su来切换账户,接着使用id来验证是否成功
[root@localhost ~]#su user04
[root@localhost ~]#id
因为user04是普通账户,权限很低,有部分命令是执行不了的,如"rm -rf /*",rm会提示无法删除,如下
当我们在user04下执行了删除命令后,虽然说其没有权限,但还是会造成影响,如下,这种情况直接将用户user04删除即可;其原因主要是bash的配置出问题
普通用户可以使用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,第二列表示允许登录所有的主机,第三列表示可以访问的用户,第四列表示可以执行上面命令(一般表示为可以使用哪个文件)
临时授权实验:在权限配置文件内配置,使用户zhangsan(一个普通账户,原本不能添加账户),配置其临时权限(sudo)使其能够在不输入密码的情况下,进行添加用户的操作;
操作:在配置文件中写入"zhangsan ALL=(ALL) NOPASSWD: /usr/sbin/useradd";解读:用户zhangsan 可以在所有的主机上在所有的用户上,不输入密码(NOPASSWD)地情况下能够使用文件useradd,即能够使用useradd进行操作
验证:进入zhangsan的用户下,尝试创建一个名为lisi的用户,如果直接使用"useradd lisi"的命令当然会建立失败,因为我们现在做的是临时提权的实验(sudo),当然在打命令时需要在命令前面加上sudo,即"sudo useradd lisi";而普通用户使用sudo的话,将是另一种报错
标签:文件,用户,Linux,txt,root,目录,localhost From: https://blog.csdn.net/2401_83604604/article/details/142033847